JS预解析与变量提升

预解析

JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程

预解析过程:

  1. 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。

  2. 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。

  3. 先提升var,在提升function。

JavaScript的执行过程

 // 案例1
 var a = 25;
 function abc() {
   alert(a); 
   var a = 10;
 }
 abc();
 ​
 ​
 // 案例2
 console.log(a);
 function a() {
   console.log('aaaaa');
 }
 var a = 1;
 console.log(a);

变量提升

  • 变量提升

    定义变量的时候,变量的声明会被提升到作用域的最上面,变量的赋值不会提升。

  • 函数提升

    JavaScript解析器首先会把当前作用域的函数声明提前到整个作用域的最前面

 // 1、-----------------------------------
 var num = 10;
 fun();
 function fun() {
   console.log(num);
   var num = 20;
 }
 //2、-----------------------------------
 var a = 18;
 f1();
 function f1() {
   var b = 9;
   console.log(a);
   console.log(b);
   var a = '123';
 }
 // 3、-----------------------------------
 f1();
 console.log(c);
 console.log(b);
 console.log(a);
 function f1() {
   var a = b = c = 9;
   console.log(a);
   console.log(b);
   console.log(c);
 }

  

 

posted @ 2019-10-15 08:16  阿江是个程序猿  阅读(629)  评论(0编辑  收藏  举报