weibo_undefined__14110511
2016-10-05 15:50
为什么要用setTimeout,这样写也可以arguments.callee(List,callback),是保存变量吗
是用来保护callback被回收,当函数执行完了变量就会被回收,用了setTimeout等25ms后才会被回收
不是。setTimeout只是延时,没有其它任何功能。而里面的callback函数是通过闭包来传值的。
function Aaron(List, callback) {
(function() {
var task;
task = List.shift();
task(); //执行函数
if (List.length > 0) { //递归分解
arguments.callee(List);
} else {
callback()
}
}())
}
我测试了,不加setTimeout也可以执行,不过最后显示的执行顺序如下:
a
b
c
callback
callbacksA
callbacksB
所以我猜测这个setTimeout只是为了演示而加的,并不是一定要加
我尝试了 ,不加setTimeout,程序会曝出 callback 没有定义。想想也是,callee 的时候,只传递了,一个参数。
那为什么,callback 在 setTimeout 就可以保留了。因为有延迟,所有,第一次调用的局部变量,还是存在的。
所以可以调用?
我只知道setTimeout()是一个只执行一次的延迟函数,而setInterval()是一个可以执行多次的延迟函数。
同学,你给取的信息有限,我有些不知道你说的是什么问题。
还有,我不知道callee()函数是干嘛的
jQuery源码解析(架构与依赖模块)
84047 学习 · 280 问题
相似问题