これら3つのコードの違いを説明できますか?彼らは私と同じように見えますが、出力は異なります。JavaScriptでクロージャを使用するときの範囲内の変数の値
1:
var i;
function print(){return function(){console.log(b)}};
function doSetTimeout(b){setTimeout(print(),2000);};
for(i=0;i<10;i++){doSetTimeout(i)}
2:
var i;
function print(){console.log(b)};
function doSetTimeout(b){setTimeout(print,2000);};
for(i=0;i<10;i++){doSetTimeout(i)}
3:第3の期待値を返している間
var i;
function doSetTimeout(b){setTimeout(function(){console.log(b)},2000);};
for(i=0;i<10;i++){doSetTimeout(i)}
第2は、未定義としてBを返しています。
ところで、のようなブロック文の後にコロンが不要、 '{}; 1,2と' –
、 print関数に 'b'を渡していません。 – Jorg
' doSetTimeout'の中で 'print'を動かすことができます。そして' b'はローカル変数です。 –