首页 > 试题广场 >

下面代码输出的结果为?

[单选题]
下面代码输出的结果为?
var a = 1;
function f(){
    var a = 2;
    var e = eval;
    e('console.log(a)');
}
f();

  • 无输出结果
  • 2
  • 1
  • 编译报错
如果你间接的使用 eval(), 如通过一个引用来调用它而不是直接的调用eval。 从ECMAScript 5起它工作在全局作用域而不是局部作用域中;这就意味着,例如,下面的代码的作用声明创建一个全局函数,并且geval中的这些代码在执行期间不能在被调用的作用域中访问局部变量。

编辑于 2017-11-28 20:09:51 回复(0)
如果你间接的使用 eval(), 如通过一个引用来调用它而不是直接的调用eval。 从ECMAScript 5起它工作在全局作用域而不是局部作用域中
如果你把eval赋值给e,相当于把window.eval赋值给e,这时e是全局作用域上的,执行的时候回去寻找全局域上的a,所以是1,如果你不复制,直接使用eval('console.log(a)'),它默认是在本地函数作用域进行,所以是2
发表于 2017-12-06 17:24:38 回复(0)
var a = 1;
function f(){
    var a = 2;
   eval( console.log(a));
}
f();//2 直接调用eval

var a = 1;
functionf(){
    vara = 2;
    var e = eval;
    e('console.log(a)');
}
f(); //1  间接调用eval


发表于 2018-08-16 10:45:16 回复(0)
发表于 2018-03-23 10:30:05 回复(0)
如果你间接的使用 eval(), 如通过一个引用来调用它而不是直接的调用eval。 从ECMAScript 5起它工作在全局作用域而不是局部作用域中

发表于 2017-11-28 11:18:34 回复(0)