Как устранить ошибку: «Подразумеваемый eval - это зло» - PullRequest
4 голосов
/ 12 ноября 2010

Я пытаюсь сделать свой код JavaScript "строгим", поэтому я запускаю его через JSLint , чтобы убедиться, что мой код соответствует.

Однако по следующему коду:

setTimeout("getExtJs()", 2000);

Я получаю следующую ошибку:

Подразумеваемый eval - это зло. Передайте функцию вместо строки.

Как сделать мой код JavaScript "строгим"?

Ответы [ 5 ]

14 голосов
/ 12 ноября 2010
setTimeout(getExtJs, 2000);

Обратите внимание, что вокруг getExtJs нет кавычек, я передаю функцию, а не строку.

РЕДАКТИРОВАТЬ: Как отмечено в комментариях, причина, по которой JSLint расстроен,что когда первый аргумент является строкой, он обрабатывается как код, выполняемый таким же образом, как eval ()

См. https://developer.mozilla.org/en/window.setTimeout

Чтобы выяснить, почему eval () (ирасширение, использующее в качестве первого аргумента здесь Strings) - зло, смотрите запись Mozilla Developer Network для eval.

3 голосов
/ 12 ноября 2010

Не стоит жаловаться, если вы делаете:

setTimeout(function(){
  // your code of this function getExtJs here
}, 2000);

Или:

setTimeout(getExtJs, 2000);

Хотя я не вижу ничего плохого в вашей реализации с точки зрения безопасности или иным образом.

1 голос
/ 12 ноября 2010

Правильный синтаксис:

setTimeout(getExtJs, 2000);

Вы передаете ссылку на функцию, и после 2000 мс функция выполняется. Если после имени функции ставить парены, то вместо выполнения ссылки вы выполняете функцию.

1 голос
/ 12 ноября 2010
setTimeout(function () {getExtJs();}, 2000);
1 голос
/ 12 ноября 2010

Как сказано, передайте функцию (без кавычек вокруг имени функции):

setTimeout(getExtJs, 2000);

Когда вы передаете строку ("getExtJs"), setTimeout в итоге eval ingЭто.Вместо этого лучше просто передать саму функцию (getExtJs).

...