setTimeout如何在Node.JS上运行,请解释这段代码

时间:2011-11-06 18:43:09

标签: 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
print 2

一个愚蠢的疑问是,虽然上面的代码有效,但这个代码却没有。

setTimeout( function (){
   console.log('print 2');
   }, (function () {console.log('print 3'); return 5000;} )
);
console.log('print 1');

请解释上述行为。

3 个答案:

答案 0 :(得分:3)

更好地格式化代码可以帮助您了解正在发生的事情。

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无关,并且会在响应控制台的任何浏览器中生成完全相同的结果。

答案 1 :(得分:1)

setTimeout有两个参数(至少,它按你使用它的方式)。

第一个参数是要调用的函数,第二个参数是在调用之前延迟的时间。

在第一个示例中,您传递了一个匿名函数和一个数字(a()的返回值)。

在你的第二个例子中,你传递了两个匿名函数(因为你从来没有调用第二个函数(没有()))。

setTimeout( 
    function (){
        console.log('print 2');
    },
    (function () {console.log('print 3'); return 5000;})()
);
console.log('print 1');

答案 2 :(得分:1)

您需要调用第二个参数 - setTimeout需要一个数字

setTimeout( function (){
   console.log('print 2');
   }, (function () {console.log('print 3'); return 5000;} )()
);
console.log('print 1');