为什么在这种情况下没有调用setTimeOut

Why the setTimeOut is not being called in this case?

本文关键字:调用 setTimeOut 这种情况下 为什么      更新时间:2023-09-26

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

这是我的代码

(function () {
    main();
    function main() {
        setTimeout(fetchdata, 2000);
    }
    var fetchdata = function () {
        alert("Boom!");
    };
})();
https://jsfiddle.net/bh44ugv6/1/

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

调用main时,fetchdata未设置,因此setTimeout(fetchdata, 2000);使用undefined

设置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!");
    };
})();

因为main中的fetchdataundefined,如果你想使用函数表达式,你应该在main之前定义它,像这样

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

也可以将fetchdata定义为函数声明

(function () {
  main();
  function main() {
    setTimeout(fetchdata, 2000);
  }
  
  function fetchdata() {
    console.log("Boom!");
  };
})();

因为fetchData还不存在。如果你把它改成:

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