(63)Wangdao.com第十天_預處理、預解析_函數 上下文對象、參數列表對象

預解析、預處理html

1. 在全局代碼執行以前,js 引擎 就會建立一個棧來存儲管理全部的 執行上下文對象數組

2. 在 全局執行上下文 window 肯定之後,進行壓棧安全

3. 在 函數執行上下文對象 肯定之後,進行壓棧函數

4. 當 函數 執行完,進行 出棧 操做this

5. 當全部的代碼執行完之後,棧中只剩下 windowspa

注意: 當棧中含有多個 函數上下文對象 ,則表示當前在執行嵌套函數。prototype

產生的上下文對象 個數 = n  + 1個全局上下文對象code



  • 當 函數名 與 變量名 相同時,變量名 將被忽略________可是要注意賦值操做,具體狀況,具體分析
  • 必定要注意 變量聲明 提高
  • js 引擎 在將要執行全局代碼以前,建立一個全局執行上下文對象 window
  • 將 var 關鍵字聲明的變量,添加爲 window 的屬性,值爲 undefined
  • 將 function 關鍵字什麼的函數,添加爲 window 的方法,值爲 函數體
  • 肯定全局 this 指向 爲 window
  • js 引擎 在將要執行函數代碼以前,建立一個函數執行上下文對象 (沒辦法直接操做)
  • 將 var 關鍵字聲明的變量,添加爲 函數執行上下文對象 的屬性
  • 將 function 關鍵字聲明的函數,添加爲 函數執行上下文對象 的方法
  • 將實參賦給形參,添加爲 函數執行上下文對象的屬性
  • 將傳入的實參添加到 arguments 對象中,並將 arguments 添加爲 函數執行上下文對象 的屬性
  • 解析器在每次調用函數時,都會傳遞兩個隱含參數(this上下文對象,arguments 參數列表):
  • this    上下文對象
    • 根據函數調用方式的不一樣,this 指向不一樣的對象
      • 看成爲普通函數調用時,this 指向全局對象 window
      • 看成爲對象的方法被調用時,this 指向調用該方法的對象
      • 看成爲構造函數調用時,this 指向建立的新對象
    • 構造函數
      • 出現的緣由:因爲目前爲止,咱們的對象都是用 new Object() 建立的,因此都是 Object 類的對象,很差區分。。。最好有個 Person 類,Animal 類
      • new Person()只要出現 new 就會在堆內存建立一個對象。
        • 這就是是一個構造函數,習慣上首字母大寫。
        • 建立時,和普通函數沒什麼區別,即 function Person(){} 便可。只是用的時候加了 new 就是構造函數了。
      • 返回值爲所建的對象。
      • 使用同一構造函數建立的對象,稱爲一類對象。。。構造函數稱爲。。。建立的對象稱爲該類的實例
    • function Person(name,gender,age){
          this.name = name;
          this.gender = gender;
          this.age = age;
          this.sayName = function(){
              document.write("我叫"+this.name);
          };
      }
      
      var ts = new Person("唐僧","男",27);
      ts.sayName();
      
      // 使用 instanceof 能夠檢查 一個對象是不是某個類的實例
      console.log(ts instanceof Person);    // 固然返回 true
      // xxx instanceof Object        永遠返回 true ,由於全部對象都是 Object 的派生類
       
    • 因爲構造函數沒執行一次就會建立一個新的方法,若是執行1000次就會建立1000個方法,這些方法彼此相同。這1000個方法徹底能夠共用一個方法
      • 解決方法1,在全家做用域中定義方法,再賦予構造函數
      • 上面方法帶來的新問題是:污染了全局做用域的命名空間,並且很不安全。
      • 因而, prototype 原型對象 完美解決了這個問題

 

  • arguments 參數列表對象
    • 在調用函數時,參數都會保存到 arguments 對象中。
    • 不是數組,可是可使用 arguments.length 來獲取參數個數。
    • 對於參數的訪問也是用 [數字索引] 的方式來操做數據。
    • 因此即便不定義形參,也能夠用 arguments 來接收並使用傳遞過來的實參。
    • arguments.callee 表示正在執行的函數對象。
相關文章
相關標籤/搜索