閉包

  1. 實例: 
  2. function test(a,b){ 
  3.    var name='大漠窮秋';
  4.    function test2(){ 
  5.      var myarg=name
  6.    } 
  7.    test2(); 
  8. test(1,2); 
  9. 對於外層的test這個function來說,它的作用域鏈是這樣的: 
  10. [{},window] 
  11. {}?{a:1, b:2,name:undefined,test2:指向test2這個function} 
  12.  
  13. 這種調用方式下this指向window 
  14. 【注】函數的創建過程: 
  15. 活動對象:activeObect 
  16. Arguments對象:存儲length、callee屬性 
  17. 給活動對象創建一個arguments屬性,並讓他指向第二步創建的arguments對象! 
  18. 在活動對象裏邊創建其他屬性;   a,b 
  19. 局部變量成爲活動對象的屬性;還有內部的函數亦如此;name,function 
  20. 活動對象被插入到作用域鏈裏邊,插入鏈表的頂部; 
  21. 若未指定this的調用對象,則永遠指向window; 
  22. 屬性查找:從左向右; 執行的時候纔會被賦值! 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章