为什么可以使用setTimeout(" 1")

时间:2017-01-01 06:08:13

标签: javascript settimeout

在阅读源代码时,我看到了一行



console.log(setTimeout("1"))




并且此代码返回一个随机数。

我不知道为什么。请帮帮我。

1 个答案:

答案 0 :(得分:3)

根据MDN

  

返回的timeoutID是一个非零的数值,用于标识通过调用setTimeout()创建的计时器;可以将此值传递给Window.clearTimeout()以取消超时。

因此,当你执行= setTimeout()时,你没有获得已经传递的东西的价值,但它是系统生成的标识符。

setTimeout在指定的延迟后在事件堆中注册事件。如果未提及延迟,则假定为0,但请注意,setTimeout(notify, 0)notify()不同。

同样setTimeout期望函数作为第一个参数。当它接收到一个字符串时,它假定,您将函数调用作为字符串传递,编译器尝试使用eval对其进行求值。因此,setTimeout("1")将成为eval("1"),这将返回"1",因此您不会收到错误。



function notify(){
  console.log('ta-da!!!');
}
var a = 10;

setTimeout("notify()",0)

// sample for eval
console.log(setTimeout("a"))

// This should throw error as `b` is not declared
console.log(setTimeout("b"))