我在JavaScript对象{}
中有这个键 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);
});
}
结果在循环外定义(值为Number(5))。但是在循环的第一次迭代中,结果变量变为未定义。有什么关于JS的东西,我不知道吗?
var result = element.func(result);
来电是否以某种奇怪的方式重新定义result
?不,那不可能,因为该呼叫是在第一次记录result
之后发出的。
在这种情况下,element.func()只是一个表示console.log()
的变量所以element.func(result)
应该等同于console.log(result)
,但它打印出的是undefined而不是5。
不知道发生了什么。
答案 0 :(得分:5)
在函数范围内有一个重复的变量声明。它甚至在定义变量之前记录了该变量。
尝试摆脱' 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);
});
}
答案 1 :(得分:2)
在console.log
中,result
引用本地变量result
,因此未定义(正如您在下一行定义的那样)。< / p>
答案 2 :(得分:2)
您正在result
循环中重新分配forEach
变量。
var result = element.func(result);
所以当循环在第一次result
element.func(result)
而不是this.initialValue
答案 3 :(得分:2)
我相信,由于var result
内部的forEach(function())
result
正在升级到console.log
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var#var_hoisting
从循环内删除var
将解决问题。