js塊級作用域

2021-08-20 02:21:18 字數 786 閱讀 3402

首先看乙個常見的函式,該函式輸出的是什麼呢?

對的,就是5個6.

為什麼會這樣呢?因為settimeout是個非同步函式,每次迴圈的時候都會建立乙個定時器,任務放到佇列裡,等主線程執行完才會執行定時器,這個時候迴圈跑完了,最後一次的 i = 5 + 1 = 6,所以輸出5個6.

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

}

方法一使用了let,let是塊級作用域變數,在每一次迴圈都會重新宣告i;var則是在for迴圈之外作用域定義的變數,無法傳入這個函式的執行域中。

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

}

使用了匿名函式,這種寫法相當於宣告了匿名函式之後立即呼叫,而且將i以引數形式傳入。我們知道函式的引數傳遞是以值傳遞的,也就是說會重新copy乙個與i相等的值傳到匿名函式中,timer則是乙個閉包,每次獲取的變數都是新的i值,因此可以列印出1,2,3,4,5.

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

})(i);

}

方法三與二差不多道理,也是乙個函式傳遞是以值形式傳遞,因而每次的i值會不一樣。

function

printi

(i) , 1000 );}

for (var i = 1; i

<= 5; i++)

如有不對的地方敬請指正,謝謝~

js塊級作用域

在了解這兩個api前,我們先了解一下塊級作用域這個概念。定義 是乙個語句,將多個操作封裝在一起,通常是放在乙個大括號裡,沒有返回值。為何需要塊級作用域?在es6之前,函式只能在全域性作用域和函式作用域中宣告,不能在塊級作用域中宣告。沒有塊級作用域導致很多場景不合理 1 記憶體變數可能覆蓋外層變數 v...

JS 無塊級作用域

js作用域為 函式級作用域 記住最簡明的一句 函式中宣告的所有變數,無論是在 宣告的,在整個函式中它們都是有定義的。下面是自己的筆記 1 首先,只是在這個函式中有定義,也就是說,在輸出語句後定義和輸出語句前定義是一樣的結果,最後變數的值都是 undefined 下面兩種寫法結果一樣 function...

塊級作用域

跨級作用域本身沒有宣告可以說的,就需要注意兩點 1.跨級作用域內宣告的var變數並不會存在這個塊級作用域內,而是會提公升到非塊級作用域內 2.在塊級作用域內宣告function,在不同瀏覽器會有不同結果,如果是根據條件宣告function的話,請用var func function的形象 但是為什麼...