面試小題 閉包模擬塊級作用域

2021-09-11 09:08:11 字數 1051 閱讀 3342

已知陣列["a","b","c","d","e"],編寫**,每過 1 秒列印一下陣列中的值。

var arr = ["a", "b", "c", "d", "e"];

for (var i = 0; i < arr.length; i++) , 1000 * (i + 1));

})(i);

}複製**

利用 es6 中 let 塊級作用域的特性。

var arr = ["a", "b", "c", "d", "e"];

for (let i = 0; i < arr.length; i++) , 1000 * (i + 1));

}複製**

看題目很容易意識到這是在考塊級作用域,考點主要是 es5 裡沒有塊級作用域,但可以用閉包來模擬塊級作用域

for (var i = 0; i < 5; i++) 

// 0 1 2 3 4

複製**

for (var i = 0; i < 5; i++) , 0);

}// 5 5 5 5 5

複製**

settimeout屬於註冊事件,繫結的事件是當前事件佇列(同步事件)執行完畢後再執行,因此等到執行console.log的時候,i已經變成 5 了。

思考以下**的列印結果。

var test = function() ;

} return arr;

};var a = test();

a[1](); // 9

a[2](); // 9

複製**

執行test()的結果是乙個陣列,裡面每乙個元素都是function,在實際呼叫的時候,i的值已經是 3 了,因此結果都是 9。

閉包和let塊級作用域

還是先從乙個題目開始 寫乙個隔1s輸出陣列的一項的函式。如果可以用es6語法,則可以這麼寫 function print arr 1000 i 但是如果把這裡的let改成var,則輸出就會變成一連串的undefined。有同學很快想到了這是閉包啊,因為settimeout把函式加入到microque...

塊級作用域

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

作用域 閉包

1.js執行順序 語法分析 預編譯 先生成go物件 1.函式執行生成ao物件 2.形參和變數作為ao物件的鍵名,鍵值是undefined 3.實參賦值給形參 4.在函式中找到函式宣告,把函式作為ao物件的屬性名,屬性值為函式體 執行js 作用域 變數作用範圍 1.作用域 變數作用範圍 1 函式作用域...