Javascript forEach循环中未定义的值
我在JavaScript对象{}中有这个键Javascript forEach循环中未定义的值,javascript,node.js,foreach,Javascript,Node.js,Foreach,我在JavaScript对象{}中有这个键 resolve: function () { var result = this.initialValue; console.log('initial value:',result); // 5 this.functions.forEach(function (element, index) { console.log('index:', index, 'result
resolve: function () {
var result = this.initialValue;
console.log('initial value:',result); // 5
this.functions.forEach(function (element, index) {
console.log('index:', index, 'result:',result); //index=0, result=undefined :(
var result = element.func(result);
});
}
结果在循环外部定义(值为数字(5))。但是在循环的第一次迭代中,结果变量变得未定义。关于JS有什么我不知道的吗
是var result=element.func(结果)代码>调用以某种奇怪的方式重新定义结果
?不,这不可能,因为该调用是在第一次记录结果之后进行的
在本例中,element.func()只是一个表示console.log()的变量
所以element.func(result)
应该等同于console.log(result)
,但它打印出的是未定义的,而不是5
不知道发生了什么。在您的控制台中。log
,result
指的是本地变量result
,因此它是未定义的(正如您在下一行中定义的那样)。您正在forEach
循环中重新分配result
变量
var result=element.func(结果)代码>
因此,当循环在第一次之后继续时,result
将是element.func(result)
而不是this.initialValue
,我相信由于forEach(function())
内部的var result
导致result
被提升到console.log
从循环中删除var
将解决此问题。函数范围内存在重复的变量声明。它在定义变量之前就记录了它
尝试删除“var”,并在重新分配后记录它
resolve: function () {
var result = this.initialValue;
console.log('initial value:',result); // 5
this.functions.forEach(function (element, index) {
result = element.func(result);
console.log('index:', index, 'result:',result);
});
}
可能重复的