1.作用域鏈 作用域:瀏覽器給JS的一個生存環境(棧記憶體)。 作用域鏈:JS中的關鍵字var 和function 都可以提前聲明和定義。提前聲明和定義的內容放在我們的 記憶體地址(堆記憶體)中。然後JS從上到下逐行執行,遇到變數就去記憶體地址查找是否存在這個變數。有 就使用,沒有就繼續向父級作用域查找直到 ...
1.作用域鏈
作用域:瀏覽器給JS的一個生存環境(棧記憶體)。
作用域鏈:JS中的關鍵字var 和function 都可以提前聲明和定義。提前聲明和定義的內容放在我們的
記憶體地址(堆記憶體)中。然後JS從上到下逐行執行,遇到變數就去記憶體地址查找是否存在這個變數。有
就使用,沒有就繼續向父級作用域查找直到window下結束,這種查找機制叫作用域鏈。
JS代碼中存在著大量的變數和函數,我們在使用它們的時候一定要知道它們到底歸屬誰。
2.this
1)this是JS的一個關鍵字,指定一個對象然後去替代它。
函數內的this和函數外的this,函數內的this指向行為發生的主體。函數外的this都指向window,沒有意義。
為什麼還是window?
因為瀏覽器執行JS代碼的時候在執行chifan()這個函數的時候查找到變數chifan的歸屬是window。在
window下的變數可以寫成window.chifan函數可以寫成window.chifan()。
2)函數內的this和函數在什麼環境下定義沒有關係,而只和自己的主體有關。
3)主體怎麼找?
就看這個函數(方法)帶不帶“.”(點),如果函數和方法執行帶“.”(點),那麼this就指向“.”(點)前面的
對象,如果不帶“.”就指向window。
4)自執行函數裡面的this都指向window。
this和變數的關係 先找到this的主體是誰,然後把它換成那個主體就行了,this只是代表這個主體
5)給元素中的某一個事件綁定方法,當事件觸發時,執行綁定的方法,方法中的this指向當前元素
重點是函數套函數的時候。
不要管它怎麼定義,看它執行時候的主體。
案例