文档章节

js中的拷贝和引用以及ES6大法好

yyliu
 yyliu
发布于 2015/11/04 15:42
字数 250
阅读 104
收藏 2

一些简单的东西,被引用和拷贝坑了下。

function *ngrams(sequence, n) {
  let  g = (function *(sequence){yield *sequence})(sequence);

  let history = [];
  while (n > 1) {
    history.push(g.next().value);
    n--;
  }
  for (let item of g) {
    history.push(item);
    // look at here.
    // yield Array.from(history); 
	yield history;
    history.shift();
  }
}

如果这时候用Array.from。。。WTF,什么鬼

> Array.from(ngrams([1,2,3,4,5], 3));
[ [ 4, 5 ], [ 4, 5 ], [ 4, 5 ] ]

如果for of

> for (let w of ngrams([1,2,3,4,5], 3)){console.log(w);}
[ 1, 2, 3 ]
[ 2, 3, 4 ]
[ 3, 4, 5 ]

很怀疑Array.from干啥了。。。

> Array.from(ngrams([1,2,3,4,5], 3), (v)=>{console.log(v)});
[ 1, 2, 3 ]
[ 2, 3, 4 ]
[ 3, 4, 5 ]
> Array.from(ngrams([1,2,3,4,5], 3), (v)=>v);
[ [ 4, 5 ], [ 4, 5 ], [ 4, 5 ] ]
> Array.from(ngrams([1,2,3,4,5], 3), (v)=>v+1);
[ '1,2,31', '2,3,41', '3,4,51' ]

这就明晰了,没想到会在js中碰到这种问题。。。

中午见有人讨论求一个数组最小值时这样:

Math.min.apply(Object.create(null), [1,2,3]);

说相比高程上说的方法,能更好防止变量污染。

于是去翻了翻spidermonkey和v8的实现,发现这个this根本就没用。。。至于apply,我们现在有

Math.min(...[1,2,3]);

ES6大法好啊。。。

© 著作权归作者所有

共有 人打赏支持
yyliu
粉丝 31
博文 14
码字总数 20045
作品 0
无锡
私信 提问
用 Webpack 和 ES6 转换快速开发 Rails 的富客户端

Fast Rich Client Rails Development With Webpack and the ES6 Transpiler 有更好的方式把 JavaScript 生态引入 Rails。 你有没有: 想知道是否有更好的方式在现有 Ruby on Rails 工程下使用...

开源中国匿名会员
2015/06/09
0
0
记一次前端大厂面试 | 掘金技术征文

前言 最近参加了几家杭州大厂的面试,顺利的拿到了自己心仪的offer,积累了一些高频面试题,记录给有需要的同学们。我把面试题归纳整理分为两类,一种是基础试题: 主要考察前端技基础是否扎实...

程序员解决师
2018/09/11
0
0
JS中的「import」和「require 」

和 是JS模块化编程使用的,是前端开发者们在性能探索中的又一大进步。 $ 对模块化的理解   模块化是一种将系统分离成独立功能部分的方法,一个模块是为完成一个功能的一段程序或子程序。"模...

果汁凉茶丶
2018/10/19
0
0
26个精选的JavaScript面试问题

译者按: 从各个平台精选整理出26道由浅入深的题目助你面试 原文: Top 26 JavaScript Interview Questions I Wish I Knew 译者: Fundebug 为了保证可读性,本文采用意译而非直译。另外,本文...

Fundebug
2018/10/31
0
0
ES6之Spread Operater拷贝对象

译者按: 对象拷贝和合并使用展开运算符(Spread Operator)很方便! 原文: Master Javascript’s New, Cutting-Edge Object Spread Operator 译者: Fundebug 为了保证可读性,本文采用意译而非...

Fundebug
2017/07/20
0
0

没有更多内容

加载失败,请刷新页面

加载更多

rabbitmq安装教程

RabbitMQ有Windows与Linux版本的,这里先写Windows版本的安装。 以前安装软件总是在百度上找某某安装教程,结果能按照教程安装好的软件真的不多。想起先前以为大牛说的一句话,去官网按照官网...

em_aaron
今天
6
0
Android 贝塞尔曲线实践——波浪式运动

一、波浪效果如下 贝塞尔曲线自定义波浪效果的案例很多,同样方法也很简单,大多数和本案例一样使用二次贝塞尔曲线实现,同样还有一种是PathMeasure的方式,这里我们后续补充,先来看贝塞尔曲...

IamOkay
今天
3
0
Nmap之防火墙/IDS逃逸

选项 解释 -f 报文分段 --mtu 指定偏移大小 -D IP欺骗 -sI 原地址欺骗 --source-port 源端口欺骗 --data-length 指定发包长度 --randomize-hosts 目标主机随机排序 --spoof-mac Mac地址欺骗 ...

Frost729
今天
2
0
带你搭一个SpringBoot+SpringData JPA的环境

不知道大家对SpringBoot和Spring Data JPA了解多少,如果你已经学过Spring和Hibernate的话,那么SpringBoot和SpringData JPA可以分分钟上手的。 其实我在学完SpringBoot和SpringData JPA了之...

java菜分享
今天
7
0
Chocolatey 在Window搭建一个开发环境

在看了(利用 Chocolatey 快速在 Windows 下搭建一个开发环境)后,准备从零开始 一、准备工作 1、用管理员权限启动:powershell,执行错误请参考(PowerShell因为在此系统中禁止执行脚本的解...

近在咫尺远在天涯
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部