关于var的一个问题

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 1
global scope 2


白板的微信
浏览 450回答 1
1回答

尚方宝剑之说

引用MDN的解释使用Function构造器生成的函数,并不会在创建它们的上下文中创建闭包;它们一般在全局作用域中被创建。当运行这些函数的时候,它们只能访问自己的本地变量和全局变量,不能访问Function构造器被调用生成的上下文的作用域。这和使用带有函数表达式代码的 eval 不同。就算是这样你的代码在浏览器环境下执行也是没问题的,你应该是在node环境下执行的代码,在函数外用var声明的变量也并不是全局变量
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript