javascript - setTimeout 如何工作?

标签 javascript node.js

我对 javascript 中的 setTimeout 函数有疑问。当我们调用 setTimeout 函数而不返回任何内容时,这对我来说没问题。就像

setTimeout(function() {
   console.log("ok function called")
},2000); 

在上面的示例中,它只是在 2000 毫秒后调用该函数,

如果我这样写

setTimeout(function(params) {
   console.log("passed value is"+params)
},2000,55);

现在它会以 55 作为参数来调用这个函数,对吗?

但问题是,当我打电话写这样的

setTimeout(function(params) {
   console.log("passed value is"+params)
}(55),2000);

这里函数正在使用 55 作为参数进行调用,但现在正在等待 2000ms

当我这样写

setTimeout(function(params) {
    console.log("passed value is "+params);
     return function(){
      console.log(params)
     };
 }(55),2000);

在这个唯一的返回函数中,调用延迟为 2000 毫秒,行 console.log("passed value is "+params);立即执行

请帮我解决这个问题。

最佳答案

一个是函数。另一种是函数调用。

首先,让我们暂时忘记 javascript。如果您了解任何其他编程语言,您希望下面的两段代码做什么?

function a () { return 1 }

x = a;
y = a();

您期望x 是什么? 1 还是指向函数 a 的指针?

您期望 y 是什么? 1 还是指向函数 a 的指针?

函数不是函数调用。当您调用函数时,它会返回一个值。

<小时/>

现在让我们切换回 JavaScript。每当我对一段代码感到困惑时,我都会尝试使语法更简单,以便我能够理解发生了什么:

setTimeout(function() {console.log("ok function called")}, 2000);

现在,这是一段紧凑的代码,让我们简化语法。上面的代码等同于:

var a = function() {console.log("ok function called")};
setTimeout(a, 2000);

那它有什么作用呢? 2 秒后它将调用函数 a

现在让我们看一下:

setTimeout(function() {console.log("ok function called")}(), 2000);
                                  // Note this ----------^^

这与:

相同
 var b = function() {console.log("ok function called")}();
 setTimeout(b, 2000);

可以进一步简化为:

var a = function() {console.log("ok function called")};
var b = a();
setTimeout(b, 2000);

所以我希望你能明白你真正传递给 setTimeout 的是什么。您传递的是函数的返回值,而不是函数本身。

关于javascript - setTimeout 如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50247035/

相关文章:

javascript - 拒绝然后解决 Q Promise

node.js - 如何杀死在 nightwatch globals.js 中 : function in the after:function 之前产生的进程

node.js - 这是服务器代码还是应用程序代码的问题?

mysql - 如何仅显示 MySQL 中基于另一个表的列中的一行 - Express JS

javascript - Canvas - 获取颜色位置(如果可用)

javascript - Wordpress 和 DD 的终极淡入幻灯片 : Code Doesn't Scroll Through Thumbnails

具有音乐队列事件监听器的 Javascript 库?

javascript - 如何将动画设置为图像后面的 div?

javascript - Yeoman 使用 args 通过代码调用生成器

node.js - Raspberry PI 上的 Ember JS