閉包與迴圈的嘗試

2021-08-03 20:04:52 字數 2400 閱讀 8086

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進行了引用,回掉函式與i的變化是不同步的,i已經變到6的時候,可能timer函式還沒有開始執行

for (var i=1; i<=5; i++) , i*1000 );

})();

}

輸出結果為:

雖然這裡用到了自執行函式,但是和上面的原因是一樣的

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

})();

}

或是這樣

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

})(i);

}

結果:

0

1 2 3 4

在第乙個中,由於自執行函式的存在,形成了乙個塊級作用域,在每次執行這個自執行函式的時候,j每次都是需要重新宣告的,所以對於每一次的settimeout中的j都是不一樣的。

在第二種,給自執行函式傳遞了引數i,timeer函式中擁有自己的形參變數,所以每次的執行結果會不相同,雖然這兩種的實現方式不太一樣,但是基本的思路都是一致的,借助自執行函式,讓每個timeer擁有不同的j或者是形參

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

}

執行結果同上,對於let而言形成了乙個塊級作用域,所以每次的j也就是不同的了

for(let i = 0; i < 5; i++) , i*1000);

}

for 迴圈頭部的let宣告有乙個特殊的行為,這個行為指出變數在迴圈過程中不止被宣告一次,每次迭代都會宣告,隨後的每個迭代都會使用上乙個迭代結束的值來初始化這個變數

this是乙個語言中的關鍵字,this這個物件是誰取決於函式被呼叫的方式,簡單來說,就是「誰呼叫的,就是誰」

var obj = 

}var id = "not awesome";

obj.cool(); //awesome

settimeout(obj.cool, 100); //not awesome

對於obj.cool(),由於是obj呼叫的cool,則在cool的內部,this指代的就是obj這個物件,所以this.id輸出的就是objid,也就是awesome

settimeout(obj.cool)中由於settimeoutobj.cool這個函式存在引用,形成了閉包,所以此時cool函式中的this也就是呼叫settimeout的物件,就是window,所以輸出的結果就是not swesome

var obj = , 100 );

}}};

obj.cool(); // 酷吧?

var obj = , 100 );

}}};

var count = -1;

obj.cool();

settimeout(obj.cool, 100);

用當前的詞法作用域覆蓋了 this 本來的值

執行結果:

this: object count: 1

this: window count: 0

var obj = .bind( this ), 100 ); // look, bind()!

}}};

var count = -100;

obj.cool();

settimeout(obj.cool, 100);

執行結果:

1

-99

Js閉包與迴圈

目標 點選任何乙個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 實際上此時執行的...

閉包與迴圈的結合

例一 function constfunc v var funcs for var i 0 i 10 i console.log funcs 7 輸出7 對比上面的函式 例二 function constfuncs return funcs var funcs constfuncs console....

閉包的迴圈引用

unowned self 面試題 請說出工作中遇到的迴圈引用 不要說沒有遇到過 class viewcontroller uiviewcontroller func loaddata completion 析構函式 類似於 oc 的 dealloc deinit 方法一 1.方法一,類似於 oc 的...