javascript - js setTimeout中return 函数如何自己执行的?
PHP中文网
PHP中文网 2017-04-11 13:32:07
0
5
352
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级讲师

reply all(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);
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!