隐藏使用 eval

Tags
javascript
Created
Jul 24, 2015 7:40 PM

如果参数不是字符串,eval()将会将参数原封不动的返回

setTimeout 和 setInterval 也接受第一个参数为字符串的情况。 这个特性绝对不要使用,因为它在内部使用了 eval

注意: 由于定时器函数不是 ECMAScript 的标准,如何解析字符串参数在不同的 JavaScript 引擎实现中可能不同。 事实上,微软的 JScript 会使用 Function 构造函数来代替 eval 的使用。

function foo() {

// 将会被调用

}

function bar() {

function foo() {

// 不会被调用

}

setTimeout('foo()', 1000);

}

bar();

由于 eval 在这种情况下不是被直接调用,因此传递到 setTimeout 的字符串会自全局作用域中执行; 因此,上面的回调函数使用的不是定义在 bar 作用域中的局部变量 foo。

SuperMade with Super