JS基础----01----变量提升

还记得一开始做项目的前端时,HTML,CSS,JavaScript都没有怎么接触过,看着动不动几百行甚至上千行的页面,很是头痛,只能一点一点看,什么不知道怎么调用接口,怎么简单处理后端返回的数据,连JSON都不知道是啥,做多了之后,渐渐明白JS才是真正的核心,vue原来是一个JS库,慢慢感觉到了JS的强大,真的忍不住说一句:“Java是世界上最好的语言”

JS的变量提升(hoisting)

顾名思义,就是把变量和函数的声明都提升到顶部,看栗子看栗子(我书写JavaScript的习惯是不加分号,但有的时候分号是必须的,缺少分号,可能会出现意想不到的错误)

以下两个demo的运行结果相同:
x = 5    //初始化
console.log("x: ", x)
var x    //声明
var x
x = 5
console.log("x: ", x)
在控制台输出的结果均为:x: 5

现在我们可以理解何为变量提升,第一个例子中,我们在最后声明变量x,却可以在一开始就使用它。但如果你没有开启“严格模式”(下篇会整理这个),即使不声明变量(var x),它也是可以使用的,而且会成为全局变量,但当你在函数内直接使用而不定义变量时,这是非常糟糕的,这污染了全局的命名空间

JS的初始化不会提升

"use strict";   //严格模式
var x = 1
var y = 4
console.log("x + y: ", x+y)
运行结果:

x + y: 5

"use strict";   //严格模式
var x = 1
console.log("x + y: ", x+y)
console.log("x: ", x)
console.log("y: ", y)
var y = 4
运行结果:

x + y: NaN
x: 1
y: undefined
变量y的声明提升了,可是y=4显然没有,例二等同于

"use strict";
var x = 1
var y
console.log("x + y: ", x+y)
console.log("x: ", x)
console.log("y: ", y)
y = 4
也许我们并不需要被变量提升太过扰乱心神,只要在每个作用域的开始时声明这些变量就好,这正符合JS的解析过程
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值