Javascript setTimeout是否会停止其他脚本执行

Ume*_*iya 12 javascript

我指的是这个.一切都还不清楚.

  • 我有一个fillTree()更新树的JS函数,它有复选框.
  • 我有另一个函数checkSelectedBoxes()执行window.onload检查所选复选框.
  • 现在连接了许多其他功能.

我的问题:

  • 如果我正在使用setTimeout()其他脚本功能也会停止并等待我的功能完成加载?

可能是这种情况:

function fillTree(){...}
function checkSelectedBoxes(){...}

fillTree(); // This take time to get data. onLoad() doesnt work.
setTimeout(function(){ checkSelectedBoxes()  },5000);
Run Code Online (Sandbox Code Playgroud)

即使在增加时间间隔后,这也会返回空值.是否fillTree()暂停执行?

Jos*_*eph 14

不,setTimeout不等你(因此,JS没有暂停功能).setTimeout稍后将该任务放在什么位置,并允许执行下一行.达到超时时,它会将该任务插入执行行.当没有其他代码在运行时,它会执行指示的功能.

你想要做的是给你一个回调,fillTree()并在完成后执行.

function fillTree(callback){

    //do something very long

    callback(); //execute passed function when it's done
}

fillTree(function(){
    checkSelectedBoxes(); //executes only when fillTree finishes
})
Run Code Online (Sandbox Code Playgroud)

  • "它将该任务插入执行行"并不完全准确.它不会中断用户代码,也不会同时运行; 它只会在没有运行JS用户代码并且已达到超时时运行. (3认同)
  • 这是一个非常重要的方面,因为这允许程序员对可重入性进行分析(例如,它不会重新进入). (2认同)