【发布时间】:2021-05-06 05:24:04
【问题描述】:
const sayHello = function () {
console.log("hello");
};
sayHello;
sayHello();
setTimeout(sayHello, 1000);
setTimeout(sayHello(), 1000);
我有点困惑为什么第 5 行“什么都不做”但也没有抛出错误,而第 8 行按预期运行但第 9 行抛出无效回调错误。我正在运行的这段代码是 Visual Studio Code,如果它有所作为的话。
【问题讨论】:
-
好的,所以
setTimeout的工作原理是它接受(Function, Number)之类的参数,并在达到时间数时尝试执行该函数。问题是sayHello是一个函数,而sayHello()是未定义的。这是因为sayHello()是函数的执行形式,因此它等于它返回的内容,在你的情况下,NOTHING -
sayHello;什么都不做,因为它是对函数的引用。另一方面,sayHello();调用该函数(记录“hello”)。但是,当使用 setTimeout 时,您应该将一个函数作为第一个参数传递,这是您第一次做的。第二次,您立即调用该函数并将返回值传递给 setTimeout,但是由于该函数不返回任何内容,因此最后一行等效于setTimout(undefined, 1000),因此出现错误。 -
要真正了解正在发生的事情,重要的是要了解当遇到像
setTimeout(sayHello(), 1000);这样的行时,除了sayHello()之外的所有内容都将被完全忽略,直到函数调用被解决。为了更好地了解事情发生的顺序和发生方式,请尝试运行此行(在浏览器中):alert(prompt("enter your name:") + " is " + prompt("enter your age:") + " years old")
标签: javascript settimeout