*this只和執行環境有關,和聲明環境無關。誰調用this,this就指向誰。app
*this的指向分爲四種:函數
1.做爲普通函數調用:this
2.做爲對象的方法調用:spa
指向對對象,但用新變量引用該方法時候,又變爲普通函數調用,指向window:對象
解釋:方法其實就是一個對象中,屬性賦了一個函數,而o.getN就表明這個函數,把它賦給一個新變量調用之,變成了普通函數調用。blog
3.在構造函數中,指向new運算符計算出來的實例對象。
get
4.apply調用:變量
apply的做用是改變函數的調用對象,它的第一個參數就表示改變後的調用對象,因此,this就指向第一個參數。構造函數
*當apply的參數爲空或null時,默認調用全局函數。引用
*有時候咱們使用call和apply的目的並不在於指定this的指向,而是借用其餘對象的方法,那麼咱們就傳入null來代替某個具體的對象。
Math.max.apply(null,[1,2,33,4,6]);//33