Js閉包與迴圈

2022-09-02 05:12:08 字數 1137 閱讀 4135

目標:點選任何乙個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進行了引用,回掉函式與...