How to eliminate error: “Implied eval is evil”

匿名 (未验证) 提交于 2019-12-03 01:38:01

问题:

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.



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