JS代码的执行步骤与变量和函数的提升

Js代码分为两个执行步骤

1.预解析

提升(hoisting)
JavaScript代码在预解析阶段,会对以var声明的变量名,和function开头的语句块,进行提升操作

2.执行

变量的提升

  alert(a);
  var a = 1;
提升后的代码模拟
var a;
alert(a);
a=1;

函数同名,如何提升?

在预处理阶段会将两个函数同时提升,但后来的会覆盖前面的

      func1();  //last
      function func1(){
          console.log('This is first func1');
      }

       func1();  //last
       function func1(){
           console.log('This is last func1');
                       }
提升后的代码模拟
 function func1(){
            console.log('This is first func1');
        }//该函数被后一个覆盖。

       function func1(){
            console.log('This is last func1');
        }
        func1();  //最终打印的都是last
         func1();  //最终打印的都是last

变量和函数同名

在提升的时候,如果有变量和函数同名,会忽略掉变量,只提升函数

alert(foo); //undefined  函数体
        function foo(){}
        var foo = 2;
        alert(foo); //2
//预解析 提升后的代码
function foo(){};
        alert(foo);
        foo=2;
        alert(foo);

函数表达式不会被提升

func();
        var func = function(){
            alert("你猜我会不会被调用");
        }

        //提升后的代码
        var func;
        func();
        func = function(){
            alert("你猜我会不会被调用");
        };
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值