for var let閉包理解

2021-08-20 11:34:05 字數 1420 閱讀 4725

let、 var、 settimeout,一點思考。

for(var i = 0; i < 10; i++),100);

}

1

2 3

4 5

結果是很顯而易見的,10次都是10,在面試前端的閉包知識時候很常見。

用上let之後,

for(let i = 0; i < 10; i++),100);

}

1

2 3

4 5

結果是:

0、1、2、3、4、5、6、7、8、9

為什麼var和let宣告的i,得到不同的結果?

var宣告的i,作用域不僅僅在for迴圈內,還在for迴圈的外部。

當settimeout執行的時候,for迴圈已經完成,i此時的值是10,我們稍微調整一下**:

for(var i = 0; i

< 10; i++),100);

}function

consolelog()1

2345

678

結果是10次10。

for(var i = 0; i

< 10; i++)

1

var i;

for(i = 0; i

< 10; i++)

1

2 等價。

但是在let宣告的時候則不一樣,

for(let i = 0; i

< 10; i++)

1

let i;

for(i = 0; i

< 10; i++)

1

2 是不等價的,因為let宣告只在**塊中有效。

但是,如果僅僅這樣,我們或許很容易理解

for(var i = 0; i < 10; i++),100);

}

1

2 3

4 5

得到10次10,然而為什麼

for(let i = 0; i < 10; i++),100);

}

1

2 3

4 5

得到0-9?

在settimeout的時候,匿名函式function()會被宣告建立,當匿名函式執行的時候,會查詢當前執行環境的 i 的值。

var宣告的 i ,執行環境的 i 的值為10,但是let宣告的 i,執行環境中 i 的值是每乙個迴圈建立匿名函式時候的 i。

所以得到了0-9的值。

let替換var,可以很好的解決閉包的問題。

for var let閉包理解

let var settimeout,一點思考。for var i 0 i 10 i 100 結果是很顯而易見的,10次都是10,在面試前端的閉包知識時候很常見。用上let之後,for let i 0 i 10 i 100 結果是 0 1 2 3 4 5 6 7 8 9 為什麼var和let宣告的i...

python閉包怎麼理解 Python 閉包的理解

很多函式型的語言都有閉包這一概念,比如python的兄弟js。人們剛聽到閉包這一概念總會覺得它很晦澀,難以理解。其實不然,主要是他的名字起得太抽象了,讓人誤以為很難。下面舉乙個例子 coding utf 8 def foo nums 0 5 for i in range 5 nums i lambd...

javaScript閉包理解

以下是樓主的見解,如有錯誤請幫忙矯正。以下是是乙個簡單的閉包例子 function creatfunc var myfunc creatfunc alert myfunc 變數variable是乙個閉包,閉包的生命週期一般為呼叫閉包的物件為空 null 時結束。舉乙個複雜點的例子 var singl...