课程
/前端开发
/jQuery
/jQuery源码解析(架构与依赖模块)
为什么要用setTimeout,这样写也可以arguments.callee(List,callback),是保存变量吗
2016-10-05
源自:jQuery源码解析(架构与依赖模块) 3-2
正在回答
是用来保护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 就可以保留了。因为有延迟,所有,第一次调用的局部变量,还是存在的。
所以可以调用?
yuqingzhijie3596863
我只知道setTimeout()是一个只执行一次的延迟函数,而setInterval()是一个可以执行多次的延迟函数。
同学,你给取的信息有限,我有些不知道你说的是什么问题。
还有,我不知道callee()函数是干嘛的
举报
由浅入深地剖析jQuery库的设计与实现,揭开框架背后的秘密
2 回答为什么一定要用call方法?
6 回答;(function(){})() 为什么要加 ; 分号
4 回答为什么要使用一个fn,而不直接在prototype上面搞
1 回答这里为什么要加个if判断
1 回答为什么要做this是否为当前实例的判断?