課程
/前端開(kāi)發(fā)
/jQuery
/jQuery源碼解析(架構(gòu)與依賴模塊)
為什么要用setTimeout,這樣寫也可以arguments.callee(List,callback),是保存變量嗎
2016-10-05
源自:jQuery源碼解析(架構(gòu)與依賴模塊) 3-2
正在回答
是用來(lái)保護(hù)callback被回收,當(dāng)函數(shù)執(zhí)行完了變量就會(huì)被回收,用了setTimeout等25ms后才會(huì)被回收
不是。setTimeout只是延時(shí),沒(méi)有其它任何功能。而里面的callback函數(shù)是通過(guò)閉包來(lái)傳值的。
function Aaron(List, callback) {
? (function() {
? ? var task;
? ? task = List.shift();
? ? ? task(); //執(zhí)行函數(shù)
? ??
? ? if (List.length > 0) { //遞歸分解
? ? ? arguments.callee(List);
? ? } else {
? ? ? callback()
? ? }
? }())
}
我測(cè)試了,不加setTimeout也可以執(zhí)行,不過(guò)最后顯示的執(zhí)行順序如下:
a
b
c
callback
callbacksA
callbacksB
所以我猜測(cè)這個(gè)setTimeout只是為了演示而加的,并不是一定要加
我嘗試了 ,不加setTimeout,程序會(huì)曝出 callback 沒(méi)有定義。想想也是,callee 的時(shí)候,只傳遞了,一個(gè)參數(shù)。
那為什么,callback 在?setTimeout 就可以保留了。因?yàn)橛醒舆t,所有,第一次調(diào)用的局部變量,還是存在的。
所以可以調(diào)用?
yuqingzhijie3596863
我只知道setTimeout()是一個(gè)只執(zhí)行一次的延遲函數(shù),而setInterval()是一個(gè)可以執(zhí)行多次的延遲函數(shù)。
同學(xué),你給取的信息有限,我有些不知道你說(shuō)的是什么問(wèn)題。
還有,我不知道callee()函數(shù)是干嘛的
舉報(bào)
由淺入深地剖析jQuery庫(kù)的設(shè)計(jì)與實(shí)現(xiàn),揭開(kāi)框架背后的秘密
2 回答為什么一定要用call方法?
6 回答;(function(){})() 為什么要加 ; 分號(hào)
4 回答為什么要使用一個(gè)fn,而不直接在prototype上面搞
1 回答這里為什么要加個(gè)if判斷
1 回答為什么要做this是否為當(dāng)前實(shí)例的判斷?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號(hào)-11 京公網(wǎng)安備11010802030151號(hào)
購(gòu)課補(bǔ)貼聯(lián)系客服咨詢優(yōu)惠詳情
慕課網(wǎng)APP您的移動(dòng)學(xué)習(xí)伙伴
掃描二維碼關(guān)注慕課網(wǎng)微信公眾號(hào)
2021-03-18
是用來(lái)保護(hù)callback被回收,當(dāng)函數(shù)執(zhí)行完了變量就會(huì)被回收,用了setTimeout等25ms后才會(huì)被回收
2019-07-01
不是。setTimeout只是延時(shí),沒(méi)有其它任何功能。而里面的callback函數(shù)是通過(guò)閉包來(lái)傳值的。
2017-05-15
function Aaron(List, callback) {
? (function() {
? ? var task;
? ? task = List.shift();
? ? ? task(); //執(zhí)行函數(shù)
? ??
? ? if (List.length > 0) { //遞歸分解
? ? ? arguments.callee(List);
? ? } else {
? ? ? callback()
? ? }
? }())
}
我測(cè)試了,不加setTimeout也可以執(zhí)行,不過(guò)最后顯示的執(zhí)行順序如下:
a
b
c
callback
callbacksA
callbacksB
所以我猜測(cè)這個(gè)setTimeout只是為了演示而加的,并不是一定要加
2016-10-24
我嘗試了 ,不加setTimeout,程序會(huì)曝出 callback 沒(méi)有定義。想想也是,callee 的時(shí)候,只傳遞了,一個(gè)參數(shù)。
那為什么,callback 在?setTimeout 就可以保留了。因?yàn)橛醒舆t,所有,第一次調(diào)用的局部變量,還是存在的。
所以可以調(diào)用?
2016-10-14
我只知道setTimeout()是一個(gè)只執(zhí)行一次的延遲函數(shù),而setInterval()是一個(gè)可以執(zhí)行多次的延遲函數(shù)。
同學(xué),你給取的信息有限,我有些不知道你說(shuō)的是什么問(wèn)題。
還有,我不知道callee()函數(shù)是干嘛的