js中使用forEach方法遇到的问题
2016-12-12 本文已影响797人
iceman_dev
今天在《你不知道的JavaScript》中看到forEach
方法中,还可以传一个上下文对象,以前没有发现这个细节,并且在《JavaScript高级程序设计》中,也没有提到这个细节,这次涨见识了,《你不知道的JavaScript》中是这样描述的:

当知道了这种用法之后,我本人又做了测试,但是发现了一个问题,就是将这代码做一个简单的变形:
var nums = [1,2,3,4,5,6];
var obj = {
name : 'iceman'
}
var name = 'shoushou';
function foo (item , index){
console.log(index + ' , ' + item + ' , ' + this.name);
}
nums.forEach(foo, this)
我测试这段代码的本意是想看看传入不同的上下文对象的结果,但是当我传入全局上下文的this的时候,这段代码在node.js中和在浏览器运行中有不同的结果。
- node.js中的运行结果:

- 浏览器中的运行结果:

这是为什么呢?想了很久都没有想明白。是因为内部执行机制不同吗?但是Google浏览器和node解析js不都是用的v8引擎吗?