我有一个关于javascript函数序列的问题,下面我有两个代码,为什么这两个程序的结果不同? 我认为第一个程序结果将等于第二个程序结果。
function test1() {
for (var i = 1; i <= 1000000; i++) {
}
console.log("test1");
}
function test2() {
console.log("test2");
}
test1();
test2();
//test1
//test2
function test1() {
setTimeout(function() {
console.log("test1");
}, 1000);
}
function test2() {
console.log("test2");
}
test1();
test2();
//test2
//test1
答案 0 :(得分:0)
因为setTimeout
(MDN | spec)的目的是安排对函数稍后调用,所以异步调用。所以在你的第二个例子中,你首先调用test1
,然后调用匿名回调一秒钟,然后返回。然后你打电话给test2
立即打印。一秒钟后,计时器调用回调,并打印test1
。
对你的第二个例子的这个小调整可能会更清楚:
function test1() {
console.log("test1 called, setting up timer");
setTimeout(function() {
console.log("timer fired and called the callback");
}, 1000);
}
function test2() {
console.log("test2 called");
}
test1();
test2();
您会看到此输出(最后一行仅在一秒后出现):
test1 called, setting up timer test2 called timer fired and called the callback
答案 1 :(得分:0)
setTimeout是一个异步操作,该数字用于定义代码执行的延迟。 1000
是延迟,因此您会看到不同的结果
答案 2 :(得分:0)
http://javascript.info/tutorial/settimeout-setinterval 看一下这个 mabe它会有所帮助:)
答案 3 :(得分:0)
在我看来,也许你当前的主题陷入&#34; for&#34;在你的第一个代码片段中循环。但是操作是在第二个代码片段中异步完成的。