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

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

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大法好啊。。。

转载于:https://my.oschina.net/u/175377/blog/525835

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值