Javascript setTimeout是如何在Node.JS上工作的,请解释一下这个代码片段

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

我正准备用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
接受两个参数(至少,它与您使用它的方式相同)

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

在第一个示例中,传递一个匿名函数和一个数字(返回值
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这么漂亮的解释