js变量提升机制

-js变量提升机制:
  当作用域形成之后,js代码执行之前,浏览器会对待var和function关键字的进行提前声明或者定义,
  这种预先处理的机制叫做变量提升(预解释)

- 私有作用域的变量提升 a
  1,变量提升发生在当前作用域下
  2,当全局作用域形成的时候,不对私有作用域中的变量进行变量提升
  3,私有作用域中的var和function会在私有作用域执行的时候进行声明或定义
浏览器很懒,对做过的事情,不会再做
        var fn=0;
        function fn(){
    
          var a=1;
          console.log(a);
          
         }
         fn();

- 带var和不带var的区别 b
  1,全局var声明一个变量,和window对象有互相映射关系,定义之前使用,值为undefined
    
    console.log(fn);//undefined
    var fn=10;//10
    window.fn=12;//12

  2,不带var,是给全局window添加了一个属性( "use strict"严格模式除外),添加之前直接使用属性,报错
         console.log(a);//报错
        a=12;
        
        var a=12;
       function fn(){
         a=12;
       }
       fn();
       console.log(window.a);//12

- 只对等号左边的进行变量提升 c
  1,等号左边是匿名函数或自执行函数不进行变量提升

- 变量提升不重复 d
  1,不管是var 还是function声明,如果重复命名了,都只声明一次
  2,后面的值会覆盖前面的

- if判断下的变量提升 e
  1, 在老版本浏览器中,if判断下的var只声明不定义,function声明加定义,
     为了迎合es6中的块级作用域,在新版本浏览器中,if判断下的var和function都只声明不定义
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值