forEach循环中的未定义值

时间:2015-05-19 21:06:18

标签: 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:',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。

不知道发生了什么。

4 个答案:

答案 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将解决问题。