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