var funcs = []
[1, 2].forEach((i) => funcs.push(() => i ))
なぜ以下のエラーが発生しますか?未定義の 'forEach'プロパティを読み取ることができません
TypeError: Cannot read property 'forEach' of undefined
at Object.<anonymous>
セミコロン;
は、最初の行の末尾に追加された場合は、エラーが表示されなくなります。
var funcs = []
[1, 2].forEach((i) => funcs.push(() => i ))
なぜ以下のエラーが発生しますか?未定義の 'forEach'プロパティを読み取ることができません
TypeError: Cannot read property 'forEach' of undefined
at Object.<anonymous>
セミコロン;
は、最初の行の末尾に追加された場合は、エラーが表示されなくなります。
最初の行の最後にセミコロンはありません。だから、2行は一緒に実行し、それが
[][1, 2].forEach((i) => funcs.push(() => i ))
式にfuncs
の値を設定すると解釈されますが、空の配列のインデックス2にアクセスしようとしているので1, 2
、ちょうど2
(comma operator)は以下のようになる。
[][2] // undefined
undefined
には、forEach
の方法がありません。この問題を解決するには、行末に必ずセミコロンを置いてください(そうでない場合は、自分が行っていることを知っていることを確認してください)。
funcsの変数宣言に変数に属するものとしてインスタンス化する匿名配列が含まれないように、また配列のすべての要素を単に 'funcs'にプッシュしようとしている場合は、次のようになります。
[1, 2].forEach((i) => funcs.push(i))
数値を返す関数に数値を変換することはかなり意図的であるということは、変数名から明らかです。そうでなかったら、明白な解決策は単に 'var funcs = [1,2];' – HonoredMule
セミコロンを行に追加する必要があります。コードは 'var funcs = [] [1、2] .forEach ...'と見なされました – epascarello
'.forEach()'の代わりに '.map()'を 'var funcs = [1 、2] .map((i)=>()=> i) 'セミコロンの問題を避けるために – guest271314