2017-01-01 26 views
-2

在阅读源代码,我看到了一个线为什么可以使用的setTimeout( “1”)

console.log(setTimeout("1"))

这个代码有返回一个随机数。

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

+3

的setTimeout返回intervalID ...或许审查[文档](https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers/setTimeout)在返回值上会回答你的问题。 – Gerrit0

回答

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"))

相关问题