目標:點選任何乙個li,提示當前點選位置
1、先執行[1]位置,彈出5次警示框從0到4,執行的是for語句,i 在for內部已經變為5
2、li[i],是獲取的li的htmlcollection物件,i[i]相當於li.item(i)
3、為li[i]繫結事件,li[i].onclick 。實際上此時執行的匿名函式動態繫結的li[i],但是匿名函式是在全域性中掛起(我將它理解為呼叫另乙個函式),點選任何li彈出框都報出數字5。
修改成閉包:
每乙個li[i],單獨呼叫閉包後的函式,可以理解為每個li[i]單獨傳值製造函式。
理解閉包:
1. 視為正在執行新函式,且繫結在資料鏈上的函式,因此如果直接呼叫內部函式則會報錯。
(從新生成占用記憶體,因此謹慎使用)
var foo =)(this
) }
};console.log( foo.bar() ) // 1
2.閉包會在父函式外部,改變父函式內部變數的值。所以,如果你把父函式當作物件(object)使用,把閉包當作它的公用方法(public method),把內部變數當作它的私有屬性(private value),這時一定要小心,不要隨便。
3.閉包的執行。
var f =(function f(),
function g()
)();
typeof f; //
"number"
類似於
function f();function g()
return lastone() //
lastone 代表最後執行的函式
};console.log(f());
1.作用域:
外部不能呼叫區域性變數。但是可以通過返回函式這種變通的方法呼叫到區域性變數
function f1()return
f2; }
var result=f1();
result();
//999 ,如果呼叫result會返回function f2()這個函式,加()代表執行
JS函式與閉包
用簡潔的語法表達函式,箭頭函式不能使用arguments super new.target,沒有prototype屬性 函式名 引數 內部屬性和方法 函式名是乙個位址,指向函式。name屬性包含該函式的名稱 引數在內部表現為乙個陣列,所以呼叫時引數不受數量和種類的約束。沒有過載。可以在非箭頭函式內部...
js中for迴圈點選事件(閉包)
以上 期望依次輸出0,1,2,3,4,實際卻輸出5,5,5,5,5,這是因為閉包導致,下來來具體介紹 for迴圈是乙個外部閉包,依次繫結的點選事件是乙個函式例項,也產生了乙個閉包域,它引用了外部閉包的變數i,外部閉包域中i的最終值為5,點選事件觸發時引用外部閉包變數i 此時i 5 所以輸出的值全為5...
閉包與迴圈的嘗試
for var i 0 i 5 i i 1000 輸出結果 time 6 6 time 1001 6 time 2002 6 time 3002 6 time 4001 6 time 5001 6在上面的 中,settimeout對timer函式進行了引用,而timer函式對i進行了引用,回掉函式與...