0

我熟悉这种行为,但没有词汇来描述(因此谷歌)它。

setTimeout(function () { alert("timeout!"); }, 1000);
veryLongProcess();  // lasts longer than 1000 milliseconds

我相信这样做的结果是您在漫长的过程完成后收到警报,即在代码执行后超过 1 秒。我想这是超时将函数发送到某个单独的“线程”或“堆栈”或“循环”,这些函数只能在当前线程完成后开始,即使当前线程花费的时间比最初指定的超时时间长。

有这个名字吗?我怎样才能更多地了解它的工作原理?

4

2 回答 2

2

我相信您可能正在寻找术语“同步”编程。

由于 JavaScript 是单线程的,veryLongProcess()实际上你会因为阻塞而导致警报在 1000 毫秒后触发。

请注意,阻止 JavaScript 会显着降低用户体验,例如锁定浏览器,或使其显示“终止脚本”对话框,从而破坏进程的功能。

于 2013-11-07T22:08:27.843 回答
0

您正在寻找的是所谓的“回调函数”。您可以将函数作为变量传递给其他函数,然后在需要时执行它们。我写了一个关于它如何在下面工作的快速示例(未经测试)。

function longProcess(callback){
    //a bunch of code execution goes here
    var testNumber = 5;

    //This portion of code happens after all desired code is run
    if (callback != undefined){  //Check to see if a variable 'callback' was passed... we're assuming it's a function
        callback(testNumber);    //Execute the callback, passing it a value
    }
}

function testCallback(number){
    alert("Number: " + number);  //Alert box will popup with "Number: 5"
}

longProcess(testCallback);       //Call your long process, passing another function as a variable
于 2013-11-07T22:13:44.567 回答