预解析
说明:浏览器中的js引擎运行JavaScript(js文件,HTML中的js部分等),分为:预解析、代码执行两个步骤
a. 预解析,会把所有js中的 var (变量声明) 和 function (函数声明) 提升到当前作用域的最前边(也就是先执行var 变量名 和 function 函数名的操作)。 b. 代码执行, 按照顺序从上到下依次执行。 注: 1. 变量的预解析:变量提升,只是提升变量声明,不会提升赋值操作,如:var a = 1, 只会将 var a提升 2. 函数的预解析:函数提升,只是提升函数声明,不会调用函数,如:function fun(){...} ,会将整个函数声明提升,但不会调用// 原始代码 console.log(a); var a = 1; console.log(a); fun(); function fun(){ console.log('laile'); }; fun(); // 特殊情况:此时提升的只是 var test 这个变量声明 test(); var test = function(){ console.log('函数2被执行') }; test();
// js代码的预解析后的代码: // 1. 提升 的部分 var a function fun(){ console.log('laile') } var test // 2. 依次执行的 部分 console.log(a); // undefined a = 1; console.log(a); // 1 fun(); // laile fun(); // laile test(); // test is not a function test = function(){ console.log('函数2被执行') } test(); // 函数2被执行
预解析实例: