今天在《你不知道的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引擎吗?
网友评论
实体书应该在96页,5.2.8 迭代方法
第一段中就提到了,每个方法都接收两个参数:要在每一项上运行的函数和(可选的)运行该函数的作用域对象—影响this的值。
至于你那代码在两个环境表现不一样也是正常的啊,你在浏览器的时候你传的this是window但是你在node下传的那个this是个空对象,空对象中找不到你的this.name输出undefined很正常。