间接评估是如何工作的

时间:2013-09-19 04:22:34

标签: javascript

我在互联网上看到人们使用以下构造来获取Global对象

(1,eval)('this')

或者

(0||eval)('this')

您能解释一下它的确切工作方式以及优于windowtop等的好处吗?

UPD :测试直接与间接eval来电:http://kangax.github.io/jstests/indirect-eval-testsuite/

1 个答案:

答案 0 :(得分:2)

(1,eval)('this')相当于eval('this')

(0||eval)('this')相当于eval('this')

所以(1,eval)或(0 || eval)是产生 eval

的表达式

喜欢在:

var x = 2;
console.log( (10000, x) );  // will print 2 because it yields the second variable
console.log( (x, 10000) );  // will print 10000 because it yields the second literal
console.log( (10000 || x) ); // will print 10000 because it comes first in an OR
                             // expression

此处唯一的 catch 表示从表达式返回的对象始终是具有最大全局范围的对象。

检查代码:

x = 1;

function Outer() {
    var x = 2;
    console.log((1, eval)('x')); //Will print 1
    console.log(eval('x')); //Will print 2
    function Inner() {
        var x = 3;
        console.log((1, eval)('x')); //Will print 1
        console.log(eval('x')); //Will print 3
    }
    Inner();
}

Outer();