30秒带你看懂js变量提升

先上代码:

var a = '全局变量';
function s(){
    console.log(a);
    console.log(b);
    var b = '局部变量';
}
s();

猜下会输出啥?

控制台最后输出全局变量和undefined。是不是和你想的不太一样。

这就是js的变量提升。

s函数执行时,先进行词法分析,找到var b;变量b的声明先被置于函数作用域的最顶部,只有当程序执行到赋值语句时,才会赋值.

因此按照js顺序执行的方式.会输出undefined.

也可以像下面这样理解变量提升的处理流程:

var a = '全局变量';
function s(){
    var b;
    console.log(a);
    console.log(b);
    b = '局部变量';
}
s();

这是因为在 JavaScript 中执行上下文的工作方式造成的。函数声明也会被提升,因为函数也是变量。

函数提升仅适用于函数声明(函数声明整体提升),函数表达式例外

从概念的字面意义上说,“变量提升”意味着变量和函数的声明会在物理层面移动到代码的最前面,但这么说并不准确。实际上变量和函数声明在代码里的位置是不会动的,而是在编译阶段被放入内存中

函数和变量相比,会被优先提升。这意味着函数会被提升到更靠前的位置。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值