javascript - js setTimeout中return 函数如何自己执行的?
PHP中文网
PHP中文网 2017-04-11 13:32:07
[JavaScript讨论组]
setTimeout(function() {
    return function() {
        console.log("setTimeout");
    };
}(), 500);

function test(){
    return function() {
        console.log("test");
    };
}
test();

上述执行结果为setTimeout。

test函数里边的console语句不执行很容易理解,返回一个函数但没有调用它,所以不执行,也就不会输出test。
不过setTimeout里边函数在500ms后执行,也是返回一个函数,怎么就执行了,谁调用的它呢?求教
PHP中文网
PHP中文网

认证0级讲师

全部回复(5)
伊谢尔伦

setTimeout的第一个参数是这个东西:

function() {
    return function() {
        console.log("setTimeout");
    };
}()

这是一个立即执行函数,并不是setTimeout需要的一个函数或字符串,所以这个立即执行函数就执行了,返回了一个函数作为结果,就相当于:

setTimeout(function() {
    console.log("setTimeout");
}, 500);

然后这个函数会在500ms后执行。就这样。

阿神

在函数外出放闭合的()是自调用的意思,这个你应该不知道。你把500前边的括号去掉了就不执行了。

迷茫

自执行函数的一种写法吧,

setTimeout(function() {
    return function() {
        console.log("setTimeout");
    };
}(), 500);

function foo(callback) {
    return function() {
        callback();
    }
}
foo(function() { console.log('hello'); }());  // hello
伊谢尔伦

额,你如果这样写,它也是不执行的

setTimeout(function() {
    return function() {
        console.log("setTimeout");
    };
}, 500);

但是你是这样写的

setTimeout(function() {
    return function() {
        console.log("setTimeout");
    };
}(), 500);

注意,500之前的逗号前面你还加了()。所以你定义了函数并立即执行了它。

怪我咯

因为你自执行了这个函数.它返回一个函数加入任务队列.

你的代码可以直接看成这样吧.

setTimeout(function () {
    console.log('tes')
    }, 500);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号