JavaScript变量声明的提升

JavaScript变量声明的提升

         JavaScript不管在浏览器中运行还是node.js平台运行,都会有一个预处理阶段。
  在这个阶段js会分配全局作用域的变量的内存空间、开辟每个函数的堆内存、每个函数内部的局部变量的空间。
   在预读阶段,有变量声明的提升,只提升声明,不提升赋值。
console.log(a);
var a = 10;

此时浏览器打印会是undefined,而不是报错,原因就是:预处理阶段有变量声明的提升,只提升声明,不提升赋值。
上面的代理在预处理阶段时应是:

var a;
console.log(a);
a = 10;

由此可见,预处理阶段把变量a提升到最上方,所以第二句打印的时候是变量声明未定义,所以是undefined。
最重要的是:一定要记住,变量声明的提升无视任何的if语句,是无条件的。

var a = true;

function fun(){
    if(!a){
        var a = 10;
    }
    console.log(a);
}

fun();

此时浏览器会输出10,原理:变量声明的提升无视任何的if语句。把上面的代码解析为:

var a = true;

function fun(){
    var a 
    if(!a){
        a = 10;
    }
    console.log(a);
}

fun();

由此可见,执行函数时,先声明变量未赋值,所以是undefined,undefined隐形转换是false,在if语句中,非false即为ture,走if条件语句,把10赋值给了a,然后下一步打印a即为10,这个案例可以说明:变量声明的提升无视任何的if语句。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值