JavaScript 变量提升

什么是变量提升

变量提升是JavaScript中比较“奇怪”的现象,它允许在变量声明之前即被访问(仅存在于var声明变量),是一种JavaScript的缺陷。

console.log(num + '件') // undefined
var num = 10

1、当我们用var进行变量声明的时候,var会把声明的变量全部提前到当前作用域的最前面。

2、只提升声明,不提升赋值。

上一段代码运行时解析的过程:

var num;
console.log(num + '件')
num = 10;

如果在函数作用域中也同样遵循该规则:

function fn(){
    console.log(num)
    var num = 10
}
fn()

解析的结果

function fn(){
    var num;
    console.log(num)
    num = 10;
}
fn()

注意:

1、let/const声明的变量在未声明即被访问时会报语法错误。

2、变量在var声明之前即被访问,变量的值为undefined。

3、let/const声明的变量不存在变量提升。

4、变量提升出现在相同作用域中。

5、实际开发中推荐先声明再访问变量。

函数提升

// 1、会把所有函数声明提升到当前作用域的最前面
// 2、只提升函数声明,不提升函数调用
fn()
function fn(){
    console.log('函数提升')
}
// 正常运行,因为js函数并不是立即执行的,只有在运行时,通过声明找到需要运行的函数就可以。

函数表达式

// 如果我们使用函数表达式声明一个函数,必须先声明函数后调用,否则会报错。
fun() // 报错
fun = function(){
    console.log('函数表达式')
}

注意:

1、函数提升能够使函数的声明调用更灵活。

2、函数表达式不存在提升的现象。

3、函数提升出现在相同作用域当中。

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值