ループ変数のスコープ内のJS(再版)

転載元:https://www.cnblogs.com/zhus/p/6513741.html

 

A = VAR [];
のための(I = 0 VAR; I <10; I ++){
VAR Q = I;
A [I] =関数(){にconsole.log(Q)}
}
A [0]()

請求、 forループは、体の機能、配置されているforループの範囲で定義された関数の本体のためのループ変数q及びI、およびピアではないので、
IおよびQ = I ++再定義されていない変数は、単に、最終の割り当てを繰り返しますサイクルの終わりに、私は、Q = 9、= 10 ;
関数(){にconsole.log(Q)は以降 } 直ちに実行されないので、すべてのA [i]が(最終的には、格納されたq個のメモリ参照が行われている)されています9出力は
、しかし、ES6の宣言変数、使用方法などVarの新しいコマンドをさせますが、宣言された変数、唯一の効果letコマンドブロックが配置されているが、ループカウンタのために非常に適しLETコマンドで聞かせ
するvar A = [];
のために(私は=せ0; I <10; I ++){
レイQ = I;
A [I] =関数(){にconsole.log(Q)}
}
[6] A()ここであろう//可変出力6 let文はブロックレベルのスコープでのみ有効ですので、ここで私が唯一実際にはサイクルIのそれぞれの現在のラウンド新しい変数に影響を与えます

おすすめ

転載: www.cnblogs.com/hao-1234-1234/p/12180728.html
おすすめ