我对这种行为很熟悉,但没有词汇来描述(以及谷歌)。
setTimeout(function () { alert("timeout!"); }, 1000);
veryLongProcess(); // lasts longer than 1000 milliseconds
我相信这样做的结果是,在漫长的过程结束后,即在执行代码后超过1秒,您会收到警报。我想这是因为超时将函数发送到某个单独的“线程”或“堆栈”或“循环”,只能在当前的完成之后启动,即使当前的一个需要比超时更长的时间最初为。
指定这有名字吗?我怎样才能更多地了解它的工作原理?
答案 0 :(得分:2)
我相信你可能正在寻找“同步”这个术语。节目。
由于JavaScript是单线程的,因此veryLongProcess()
会导致警报在1000毫秒后触发,原因是阻塞。
请注意,阻止JavaScript会严重降低用户体验,例如锁定浏览器或导致其显示“杀死脚本”。对话框,打破了流程的功能。
答案 1 :(得分: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