2017-01-01 2 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"))