迴圈中使用閉包解決 var 定義函式的問題

2021-09-26 23:26:25 字數 603 閱讀 4094

經典面試題,迴圈中使用閉包解決 var 定義函式的問題

for ( var i=1; i<=5; i++) , i*1000 );

}複製**

首先因為 settimeout 是個非同步函式,所有會先把迴圈全部執行完畢,這時候 i就是 6 了,所以會輸出一堆 6。

解決辦法有三種,第一種使用閉包

for (var i = 1; i <= 5; i++) , j * 1000);})(i);}

複製**

第二種就是使用 settimeout 的第三個引數

for ( var i=1; i<=5; i++) , i*1000, i);}

複製**

第三種就是使用 let 定義 i 了

for ( let i=1; i<=5; i++) , i*1000 );}

複製**

因為對於 let 來說,他會建立乙個塊級作用域,相當於

,i*1000 );

}i++

i++...

}

巢狀for迴圈中使用標號

可以給語句塊加標號賦予它們名稱,標號位於語句之前。標號只能被continue和break引用。格式如下 label statement 語句前只允許加乙個標號,標號後面不能跟大括號。通過用break後加標號對處於標號中的語句進行控制。往往標號後是for.while.do while等迴圈。通過用標號...

JS中使用閉包來定義常量

js中有個關鍵字const,但是目前的瀏覽器不支援。如果要是定義一些常量建議使用閉包 var class function 定義了乙個靜態方法,獲取常量的方法 test.getupper bound function return test var k class.getupper bound co...

flex在for迴圈中使用setTimeout

有時候我們需要在flex中使用延時載入的功能,下面我簡單記錄一下如何在for迴圈中使用flex延時載入方法settimeout的用法 方法如下 flash.utils.settimeout closure function,delay number,parameters uint 引數詳解 clos...