Skip to content Skip to sidebar Skip to footer

How To Eliminate Error: "implied Eval Is Evil"

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

Solution 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.

Solution 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.

Solution 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).

Solution 4:

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

Solution 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.

Post a Comment for "How To Eliminate Error: "implied Eval Is Evil""