问答详情
源自:3-2 回调的灵活运用

为什么要用setTimeout

为什么要用setTimeout,这样写也可以arguments.callee(List,callback),是保存变量吗

提问者:weibo_undefined__14110511 2016-10-05 15:50

个回答

  • 慕侠4408899
    2021-03-18 14:55:08

    是用来保护callback被回收,当函数执行完了变量就会被回收,用了setTimeout等25ms后才会被回收

  • 慕无忌2114720
    2019-07-01 22:22:28

    不是。setTimeout只是延时,没有其它任何功能。而里面的callback函数是通过闭包来传值的。

  • 突然想起you
    2017-05-15 18:04:24

    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只是为了演示而加的,并不是一定要加

  • daydaytop
    2016-10-24 11:32:24

    我尝试了 ,不加setTimeout,程序会曝出 callback 没有定义。想想也是,callee 的时候,只传递了,一个参数。

    那为什么,callback 在 setTimeout 就可以保留了。因为有延迟,所有,第一次调用的局部变量,还是存在的。

    所以可以调用?

  • 全_无_修
    2016-10-14 14:21:39

    我只知道setTimeout()是一个只执行一次的延迟函数,而setInterval()是一个可以执行多次的延迟函数。

    同学,你给取的信息有限,我有些不知道你说的是什么问题。

    还有,我不知道callee()函数是干嘛的