无法读取未定义的属性'forEach'

时间:2016-08-12 00:53:23

标签: javascript

var funcs = []
[1, 2].forEach( (i) => funcs.push( () => i  ) )

为什么会产生以下错误?

TypeError: Cannot read property 'forEach' of undefined
    at Object.<anonymous>

但是,如果将分号;添加到第一行的末尾,则错误消失。

3 个答案:

答案 0 :(得分:13)

第一行末尾没有分号。所以两条线一起运行,它被解释为将funcs的值设置为

[][1, 2].forEach( (i) => funcs.push( () => i  ) )

表达式1, 2只变为2comma operator),因此您尝试访问空数组的索引2:

[][2] // undefined

undefined没有forEach方法。要解决这个问题,请务必确保在行尾添加分号(或者如果你不这样做,请确保你知道自己在做什么)。

答案 1 :(得分:0)

保持分号,这样funcs的变量声明不包括你实例化为属于变量的匿名数组,而且,如果你只是试图将数组的所有元素都推送到'funcs'那么它应该看起来像:

[1, 2].forEach( (i) => funcs.push(i) )

答案 2 :(得分:0)

这个问题的另一个解决方案是避免使用匿名数组。不需要分号。

var funcs = []
var arr = [1, 2]
arr.forEach( (i) => funcs.push( () => i  ) )