为了账号安全,请及时绑定邮箱和手机立即绑定

关于var的一个问题

关于var的一个问题

白板的微信 2018-12-22 02:15:39
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声明的变量也并不是全局变量


查看完整回答
反对 回复 2018-12-22
  • 1 回答
  • 0 关注
  • 448 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号