How to eliminate error: “Implied eval is evil”

*爱你&永不变心* 提交于 2019-12-23 12:09:42

问题


I'm trying to make my code JavaScript "strict", so I'm running it through JSLint to ensure my code is compliant.

However, on the following code:

setTimeout("getExtJs()", 2000);

I receive the following error:

Implied eval is evil. Pass a function instead of a string.

How do I make my code JavaScript "strict"?


回答1:


setTimeout(getExtJs, 2000);

Note that there are no quotes around getExtJs, I am passing the function not a String.

EDIT: As noted in the comments the reason why JSLint is upset is that when the first argument is a String it is processed as code to be executed in the same manner as eval()

See https://developer.mozilla.org/en/window.setTimeout

To find out why eval() (and by extension using Strings as the 1st argument here) is evil see the Mozilla Developer Network entry for eval.




回答2:


It shouldn't complain if you do:

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

Or:

setTimeout(getExtJs, 2000);

Although I don't see anything wrong in your implementation security-wise or otherwise.




回答3:


Like it says, pass in the function (no quotes around the function name):

setTimeout(getExtJs, 2000);

When you pass in a string ("getExtJs"), setTimeout end up evaling it. Instead of that, it is better to simply pass in the function itself (getExtJs).




回答4:


setTimeout(function () {getExtJs();}, 2000);



回答5:


The correct syntax is

setTimeout(getExtJs, 2000);

You pass a reference to the function, and after 2000ms the function is executed. If you put parens after the function name, you are executing the function instead of referencing it.



来源:https://stackoverflow.com/questions/4167689/how-to-eliminate-error-implied-eval-is-evil

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!