Javascript 在这种情况下,为什么不调用setTimeOut?

Javascript 在这种情况下,为什么不调用setTimeOut?,javascript,Javascript,我使用setTimeout函数每2秒调用一个函数,这是我的代码 这是我的密码 (function () { main(); function main() { setTimeout(fetchdata, 2000); } var fetchdata = function () { alert("Boom!"); }; })(); 但是你能告诉我为什么在这种情况下没有调用setTimeOut吗???当你调用main时,f

我使用setTimeout函数每2秒调用一个函数,这是我的代码

这是我的密码

(function () {
    main();

    function main() {
        setTimeout(fetchdata, 2000);
    }
    var fetchdata = function () {
        alert("Boom!");
    };
})();


但是你能告诉我为什么在这种情况下没有调用setTimeOut吗???

当你调用
main
时,
fetchdata
没有设置,所以
setTimeOut(fetchdata,2000)使用未定义的
代码

设置
fetchdata
后,需要调用
main()

(function () {

    function main() {
        setTimeout(fetchdata, 2000);
    }
    var fetchdata = function () {
        alert("Boom!");
    };

    main();
})();
或者改用命名函数:

(function () {

    main();

    function main() {
        setTimeout(fetchdata, 2000);
    }

    function fetchdata() {
        alert("Boom!");
    };

})();

因为
fetchData
还不存在。如果将其更改为:

function fetchdata() {
    alert("Boom!");
};

它可以工作。

因为
main
中的
fetchdata
undefined
,如果您想使用,应该在
main
之前定义它,如下所示

(函数(){
var fetchdata=函数(){
console.log(“Boom!”);
}
main();
函数main(){
setTimeout(fetchdata,2000);
}

})();
Check main()是一个闭包,setTimeout无权访问尚未定义的函数表达式Yet您认为为什么没有调用
setTimeout
?当你调试你的程序时,它访问了那一行吗?那么,在第一个代码段中,只有变量声明被提升到顶部?然而,函数的赋值发生在代码中的同一位置?@sandepnayak是的,只有声明本身被提升到顶部。您还可以在assigment
fetchdata=function(){}之后编写声明/*其他一些代码*/var获取数据