请看如下代码:
(function(){
var originalEval = window.eval;
eval('var a = 1;');
originalEval('var b = 2;');
}());
console.log(b); //输出 2
console.log(a); //报错
按理说,两者的作用域应该是一样的,为何一个是变成全局,一个还是局部?
请看如下代码:
(function(){
var originalEval = window.eval;
eval('var a = 1;');
originalEval('var b = 2;');
}());
console.log(b); //输出 2
console.log(a); //报错
按理说,两者的作用域应该是一样的,为何一个是变成全局,一个还是局部?
13 回答13.1k 阅读
7 回答2.3k 阅读
3 回答1.4k 阅读✓ 已解决
6 回答1.5k 阅读✓ 已解决
2 回答1.5k 阅读✓ 已解决
3 回答1.5k 阅读✓ 已解决
2 回答1.2k 阅读✓ 已解决
直接使用
eval
,作用域为当前作用域;间接使用,如题目中的方式,则为全局作用域。显然报错的原因是:变量a的作用域是IIFE内部
参考资料:https://developer.mozilla.org...