已知陣列["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 函式作用域...