作用域和闭包(四) 提升

当你看到var a=2 时,

JavaScript将其看作两个声明,

var a; 定义声明在编译阶段进行

a=2 ; 赋值声明会被留在原地等待执行阶段

 

只有声明本身会被提升,而赋值或其他运行逻辑会被留在原地。如果提升改变了代码执行的顺序,会造成非常严重的破坏。

 

函数声明和变量声明都会被提升。但是 函数会先被提升,然后才是变量。

 

微妙的差异,赋值并没有被提升。

声明 foo 变量 并初始化 foo = undefined

foo 的赋值在 foo() 执行后 相当于 undefined()

 () 必须是要 函数, undefined不是函数 所以报上面的错

 

反正提升这一块 ,盯着声明看就行,别的都不会被提升上去,

然后函数声明最优先,

随着版本更替,有些写法也会被禁用。

所以,

不要在同一个作用域里进行重复定义

所有的声明(变量和函数)对会被“移动”到各自作用域的最顶端,这个过程被称为提升

声明本身会被提升,而包括函数表达式的赋值在内的赋值操作并不会提升

要注意避免重复声明,特别是当普通的var声明和函数声明混在一起的时候,否则会引起很多危险的问题!

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值