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

JavaScript 全局变量的一个困惑

JavaScript 全局变量的一个困惑

繁星淼淼 2018-11-07 14:15:52
以下代码:console.log(b); b = 2; //"ReferenceError: b is not defined我以为打印出来会是 undefined。按我的理解 b = 2 没有使用 var,所以是声明了一个全局变量,既然声明了变量,那就会有变量声明提升,为什么会是ReferenceError: b is not defined 呢?而尝试加上 var:console.log(b); var b = 2; //undefined所以这样看来 用 var 和省略 var 不仅仅是局部和全局声明的区别?新手求教,谢谢!
查看完整描述

1 回答

?
江户川乱折腾

TA贡献1851条经验 获得超5个赞

// ①

console.log(b); // 代码执行到这行的时候,b未定义,在当前的作用域链上找不到b,所以 b is not defined

b = 2; 


// ②

console.log(b);

var b = 2;

// 由于变量声明提升,相当于

var b;

console.log(b); // 代码执行到这行的时候,b已经声明了,只是没有赋值而已,所以 undefined

b = 2; 

代码执行总有个先后顺序吧。。。

补充一点:
直接b = 2这种创建全局变量的方式,其实质是变为全局对象上的一个属性,即window.b = 2,所以,这不存在什么提升不提升;使用var声明的变量则存在声明提升。


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信