var a = 'global scope';function b (){var a = 'local scope';eval('console.log(a,1)'); //local scope(new Function('','console.log(a,2)'))(); //global scope}b();这段代码问什么会报错? :ReferenceError: a is not defined全局变量a不用var申明就不会报错:a = 'global scope';function b (){var a = 'local scope';eval('console.log(a,1)'); //local scope(new Function('','console.log(a,2)'))(); //global scope}b();依次打印:local scope 1global scope 2
1 回答

尚方宝剑之说
TA贡献1788条经验 获得超4个赞
引用MDN的解释
使用Function构造器生成的函数,并不会在创建它们的上下文中创建闭包;它们一般在全局作用域中被创建。当运行这些函数的时候,它们只能访问自己的本地变量和全局变量,不能访问Function构造器被调用生成的上下文的作用域。这和使用带有函数表达式代码的 eval 不同。
就算是这样你的代码在浏览器环境下执行也是没问题的,
你应该是在node环境下执行的代码,在函数外用var声明的变量也并不是全局变量
添加回答
举报
0/150
提交
取消