Javascript setTimeout是如何在Node.JS上工作的,请解释一下这个代码片段
我正准备用Nodejs让我的手变得粗糙,但是在第一个例子上进行实验和玩的时候,我发现一些行为我发现很难理解Javascript setTimeout是如何在Node.JS上工作的,请解释一下这个代码片段,javascript,settimeout,Javascript,Settimeout,我正准备用Nodejs让我的手变得粗糙,但是在第一个例子上进行实验和玩的时候,我发现一些行为我发现很难理解 var a = function () { console.log('print 3'); return 5000; }; setTimeout( function (){ console.log('print 2'); }, a() ); console.log('print 1'); 上述代码的输出为: print 3 print 1 prin
var a = function () {
console.log('print 3');
return 5000;
};
setTimeout( function (){
console.log('print 2');
}, a()
);
console.log('print 1');
上述代码的输出为:
print 3
print 1
print 2
请解释上述行为。
setTimeout
接受两个参数(至少,它与您使用它的方式相同)
第一个参数是要调用的函数,第二个参数是调用前的延迟时间
在第一个示例中,传递一个匿名函数和一个数字(返回值a()
)
在第二个示例中,您传递了两个匿名函数(因为您从不调用第二个函数(没有()
)
setTimeout
接受两个参数(至少,它的使用方式与您相同)
第一个参数是要调用的函数,第二个参数是调用前的延迟时间
在第一个示例中,传递一个匿名函数和一个数字(返回值a()
)
在第二个示例中,您传递了两个匿名函数(因为您从不调用第二个函数(没有()
)
更好地格式化代码将有助于您理解正在发生的事情
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无关,它将在响应控制台的任何浏览器中产生完全相同的结果。更好地格式化代码将有助于您了解发生了什么
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无关,它将在响应console的任何浏览器中产生完全相同的结果。您需要调用第二个参数--setTimeout需要一个数字
setTimeout( function (){
console.log('print 2');
}, (function () {console.log('print 3'); return 5000;} )()
);
console.log('print 1');
您需要调用第二个参数——setTimeout需要一个数字
setTimeout( function (){
console.log('print 2');
}, (function () {console.log('print 3'); return 5000;} )()
);
console.log('print 1');
谢谢Gazler这么漂亮的解释谢谢Gazler这么漂亮的解释谢谢Quentin这么漂亮的解释谢谢Quentin这么漂亮的解释