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

来源:互联网 发布:数据挖掘招聘要求 编辑:程序博客网 时间:2024/06/05 04:32

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("你猜我会不会被调用");        };
原创粉丝点击