var funcs = []
[1, 2].forEach((i) => funcs.push(() => i ))
为什么会产生下面的错误?无法读取属性'forEach'的undefined
TypeError: Cannot read property 'forEach' of undefined
at Object.<anonymous>
然而,错误消失如果分号;
被添加到第一行的末尾。
var funcs = []
[1, 2].forEach((i) => funcs.push(() => i ))
为什么会产生下面的错误?无法读取属性'forEach'的undefined
TypeError: Cannot read property 'forEach' of undefined
at Object.<anonymous>
然而,错误消失如果分号;
被添加到第一行的末尾。
在第一行末尾没有分号。因此,两行一起运行,并且它被解释为funcs
值设置为
[][1, 2].forEach((i) => funcs.push(() => i ))
表达1, 2
就像变成2
(comma operator),所以你试图访问一个空数组的索引2:
[][2] // undefined
而undefined
没有forEach
方法。要解决这个问题,一定要确保你在行尾加分号(或者如果你不行,确保你知道你在做什么)。
保留分号以便funcs的变量声明不包含您实例化为属于该变量的匿名数组,并且如果您只是试图将数组的所有元素都推送到“funcs”中,那么它应该看起来像:
[1, 2].forEach((i) => funcs.push(i))
我认为从变量名中可以清楚地看出,将数字转换为返回数字的函数是非常有意的。如果不是这种情况,显而易见的解决方案就是'var funcs = [1,2];' – HonoredMule
您应该将分号添加到您的行中。代码被认为是'var funcs = [] [1,2] .forEach ...' – epascarello
你可以使用'.map()'而不是'.forEach()'在单行'var funcs = [1 ,2] .map((i)=>()=> i)'为了避免问题,用分号 – guest271314