关于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

阅读 1.5k
2 个回答

引用MDN的解释

使用Function构造器生成的函数,并不会在创建它们的上下文中创建闭包;它们一般在全局作用域中被创建。当运行这些函数的时候,它们只能访问自己的本地变量和全局变量,不能访问Function构造器被调用生成的上下文的作用域。这和使用带有函数表达式代码的 eval 不同。

就算是这样你的代码在浏览器环境下执行也是没问题的,
你应该是在node环境下执行的代码,在函数外用var声明的变量也并不是全局变量

图片描述

问题无法复现

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题