Что вызывает «функция не определена» при передаче строки в setTimeout? - PullRequest
0 голосов
/ 18 сентября 2010
var my_new_function = function(){
----
};
window.setTimeout(my_new_function, 1600);

вышеописанное работает без ошибок.

когда я использую:

window.setTimeout("my_new_function()", 1600);

работает нормально, но firebug показывает ошибку:

my_new_function не определена

В некоторых статьях о setTimeout я обнаружил вызывающие функции, как в первом методе, а в некоторых других статьях я видел другой метод.

что является более правильным? и почему firebug показывает такую ​​ошибку?

Ответы [ 3 ]

3 голосов
/ 18 сентября 2010

Когда вы вызываете функцию с помощью

window.setTimeout(my_new_function, 1600);

Вы устанавливаете ссылку на функцию.

Функция во втором примере setTimeout

window.setTimeout("my_new_function()", 1600);

необходимо оценить, когда оно выполнено. Когда оно оценивается, оно выполняется в глобальной области видимости. Поэтому, если функция находится в локальной области видимости, браузер не найдет ее. [Похоже, это ваша проблема]

Опытные разработчики не будут рекомендовать использовать строки в setTimeout, так как их нужно оценивать каждый раз. Все это означает, что выполнение занимает больше времени.

Другой вариант вызова setTimeout -

window.setTimeout( function(){ my_new_function(); }, 1600);
1 голос
/ 18 сентября 2010
window.setTimeout("my_new_function()", 1600);

не работает, потому что это эквивалентно:

window.setTimeout("window.my_new_function()", 1600);

, и такая функция не определена в области видимости окна.Вы объявляете это в локальной области видимости переменной.

1 голос
/ 18 сентября 2010

Неважно, какой вы используете.Если вы передадите строку, она будет превращена в функцию при срабатывании таймера.Однако первый метод выглядит намного чище.

Обратите внимание, что передача строки запускает ее в области видимости окна, поэтому функции и другие локальные переменные могут не присутствовать и завершатся ошибкой.

...