var funcs = []
[1, 2].forEach( (i) => funcs.push( () => i ) )
为什么会产生以下错误?
TypeError: Cannot read property 'forEach' of undefined
at Object.<anonymous>
但是,如果将分号;
添加到第一行的末尾,则错误消失。
答案 0 :(得分:13)
第一行末尾没有分号。所以两条线一起运行,它被解释为将funcs
的值设置为
[][1, 2].forEach( (i) => funcs.push( () => i ) )
表达式1, 2
只变为2
(comma 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 ) )