var a = 1;
function f() {
var a = 2;
var e = eval;
e('console.log(a)')
}
f();
以上代码在浏览器控制台输出1,请问为什么不是输出2呢
var a = 1;
function f() {
var a = 2;
var e = eval;
e('console.log(a)')
}
f();
以上代码在浏览器控制台输出1,请问为什么不是输出2呢
如果你间接的使用 eval(), 如通过一个引用来调用它而不是直接的调用eval。 从ECMAScript
5起它工作在全局作用域而不是局部作用域中https://developer.mozilla.org...
var e = eval;e('console.log(a)')是间接使用,所以a是全局作用域的变量
如果你把eval赋值给e,相当于把window.eval赋值给e,这时e是全局作用域上的,执行的时候回去寻找全局域上的a,所以是1,如果你不复制,直接使用eval('console.log(a)'),它默认是在本地函数作用域进行,所以是2
10 回答11.3k 阅读
5 回答4.9k 阅读✓ 已解决
4 回答3.2k 阅读✓ 已解决
2 回答2.8k 阅读✓ 已解决
3 回答2.4k 阅读✓ 已解决
3 回答2.2k 阅读✓ 已解决
2 回答2.6k 阅读✓ 已解决
如果你间接的使用 eval(), 如通过一个引用来调用它而不是直接的调用eval。 从ECMAScript 5起它工作在全局作用域而不是局部作用域中;这里是var e=eval;所以是间接调用了,所以是全局的,可以参考https://developer.mozilla.org...