作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正准备尝试使用 Nodejs,但在尝试第一个示例时,我发现了一些难以理解的行为。
var a = function () {
console.log('print 3');
return 5000;
};
setTimeout( function (){
console.log('print 2');
}, a()
);
console.log('print 1');
以上代码的输出是:
print 3print 1print 2
AND a stupid doubt is, while the above code works, this one doesn't.
setTimeout( function (){
console.log('print 2');
}, (function () {console.log('print 3'); return 5000;} )
);
console.log('print 1');
请解释上述行为。
最佳答案
更好地格式化代码应该有助于您了解正在发生的事情。
var a = function () {
console.log('print 3');
return 5000;
};
setTimeout( function (){
console.log('print 2'); # Executed after 5000 ms.
},
a()); # Executed first and returns 5000
console.log('print 1'); #Executed second
以下代码段不起作用,因为您从未执行函数的第二部分。
setTimeout( function (){
console.log('print 2');
}, (function () { # Never executed.
console.log('print 3');
return 5000;
} )
);
console.log('print 1');
以下将起作用:
setTimeout( function (){
console.log('print 2');
}, (function () {
console.log('print 3');
return 5000;
} )(); #The brackets () will execute the function.
);
console.log('print 1');
题外话
该示例与 node.js 无关,将在响应控制台的任何浏览器中产生完全相同的结果。
关于javascript - setTimeout 如何在 Node.JS 上工作,请解释这段代码片段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8029418/
我是一名优秀的程序员,十分优秀!