Javascript array.forEach的thisArg未按预期引用

Javascript array.forEach的thisArg未按预期引用,javascript,node.js,foreach,object-reference,Javascript,Node.js,Foreach,Object Reference,给定以下代码: const theArray = ['Audi','Volvo','Mercedes']; const myObj = {a: 7}; theArray.forEach((value, index, array) => { console.log(index + ' : ' + value); console.log(array === theArray); console.log(this.a); }, myObj); 我得到以下输出: 0

给定以下代码:

const theArray = ['Audi','Volvo','Mercedes'];

const myObj = {a: 7};

theArray.forEach((value, index, array) => {
    console.log(index + ' : ' + value);
    console.log(array === theArray);
    console.log(this.a);
}, myObj);
我得到以下输出:

0 : Audi
true
undefined
1 : Volvo
true
undefined
2 : Mercedes
true
undefined
我不明白为什么
这个
不引用myObj并返回undefined而不是7。
当
这类对象返回true时,我不知道它引用了哪个对象。我只知道
this
返回一个空对象(即{})

Node.js解释器版本为v6.2.1


V8发动机版本为5.0.71.52

问题

:

箭头函数表达式的语法较短,并且在词汇上绑定值(不绑定自己的、或)。箭头函数始终为空

解决方案1

使用
功能

const theArray=[“奥迪”、“沃尔沃”、“梅赛德斯”];
常数myObj={a:7};
forEach(函数(值、索引、数组){
log(索引+':'+值);
log(数组===数组);
console.log(this.a);

},myObj)与函数表达式相比,箭头函数表达式的语法更短,并且在词汇上绑定this值(不绑定自己的this、arguments、super或new.target)。箭头函数总是匿名的。来源:如果您要删除箭头函数@NinaScholz,它是有效的,解决方案是什么?如果您需要定义此参数,您应该使用较旧的
函数(){}
语法。箭头函数总是在词汇上绑定到此语法。谢谢,完全忽略了关于箭头函数的那一点。所以在我的示例中,这是指包含forEach循环的对象。(那么这一定是一个/全局对象,它只是空的?
这个
指的是windows对象。好的,我认为在node.js中没有窗口对象,可能是因为它在服务器上运行,而不是在浏览器中。我发现node.js中有一个最接近窗口对象的全局对象。:)以防您感兴趣。@MMike Node.js将
窗口
替换为
过程
。它充当全局对象,其功能与您在浏览器上的
窗口中找到的类似@从某些方面来说,这是错误的。标准的全局JavaScript API可通过
global
获得<代码>进程
保存所有节点扩展。因此,您可能会认为它就像
文档
,但它实际上是它自己的东西。