1. 程式人生 > >前端筆記四 預解析、作用域、this關鍵字

前端筆記四 預解析、作用域、this關鍵字

div 依次 () 內存 傳參數 全局 define call() 當前

預解析

  個人定義:js代碼執行之前,會在相應的執行環境中,預先把一些東西解析到內存。

       正式執行前,解析 var function 等定義,只有變量和函數才會發生變量提升,只是提升聲明不會賦值。

  預解析哪些東西: var 、function.

  預解析順序:

    1.首先找到<script>...</script>標簽,按照<script>塊依次解析。不會出現跨塊解析的情況。

    2.解析執行環境。首先解析的是全局作用域範圍,當執行函數時,才會進入函數的解析執行環境。

    3.對標識符 var 、function 進行解析。說明function的優先級高於var。  

      function example5() {
        var f = function() {return 1;};
        function f() {return 2;};
        return f;
      }
      var a5 = example5();
      alert(a5());      //1

    解析為:   

      function example5() {
        var f; // function聲明
        var f; // var聲明
        f = function f() {return 2;}; // function賦值
        f = function() {return 1;}; // 等號賦值
        return f;
      }
      var a5 = example5();
      alert(a5());

  預解析通常就是我們常說的聲明提前。

作用域: 個人理解為預解析中的解析執行環境。

  分為全局作用域、函數作用域(函數內部)、塊級作用域({}大括號內部)

  註意var 屬於函數作用域,let屬於塊級作用域。 

  //4種形式   var a = 1;   function fn1(){     console.log(a);   }   fn1(); //輸出1
  function fn1(){     var a = 1;   }   fn1();   console.log(a) //報錯
  var a = 1;   function fn1(){     console.log(a);     a = 2;   }   fn1();   console.log(a) //輸出 1,2
  var a = 1;   function fn1(){     console.log(a);     var a = 2; //全局變量和局部變量同名時,全局變量的不會作用於同名局部變量的作用域   }   fn1();   console.log(a) //輸出 undefined, 1 this關鍵字:   //在簡單函數中使用   function fu(){     //"use strict"     console.log(this); //window,嚴格模式下為undefined   }   //在對象的方法中   var obj = {     name: abc,     action :function(){       this.name; //this表示當前obj對象     },     msg : fu //當使用外部對象時,this不在指向window,而是obj。   }   //在構造函數中   function Fn(name,color){     this.name = name;     this.color = color;   }   var f1 = new Fn("abc","red"); //this指向當前實例化的對象
  //改變this的指向 apply() 數組為參數,call()對象為參數 1.33分鐘   var name = "yanpin";   var obj = {     name: "abc",     action:function()     {       console.log(this.name)     }   };   console.log(obj.action.call()); //不傳參數,默認window,輸出name   console.log(obj.action.call(obj)); //this指向obj

  

前端筆記四 預解析、作用域、this關鍵字