首選區域性變數為全域性屬性和索引值
在將搜尋擴充套件到更大的範圍之前,Javascript 引擎首先在本地範圍內查詢變數。如果變數是陣列中的索引值,或者是關聯陣列中的屬性,則它將在查詢內容之前首先查詢父陣列。
在處理效能關鍵程式碼時,這會產生影響。以一個常見的 for
迴圈為例:
var global_variable = 0;
function foo(){
global_variable = 0;
for (var i=0; i<items.length; i++) {
global_variable += items[i];
}
}
對於 for
迴圈中的每次迭代,引擎將查詢 items
,查詢專案中的 length
屬性,再次查詢 items
,查詢 items
的 index i
處的值,然後最終查詢 global_variable
,首先在檢查全域性範圍之前嘗試本地範圍。
對上述功能的高效重寫是:
function foo(){
var local_variable = 0;
for (var i=0, li=items.length; i<li; i++) {
local_variable += items[i];
}
return local_variable;
}
對於重寫的 for
迴圈中的每次迭代,引擎將查詢 li
,查詢 items
,查詢索引 i
的值,並查詢 local_variable
,這次只需要檢查本地範圍。