this、apply、call和bind

this老是指向一個對象,而具體指向哪一個對象是在運行時基於函數的執行環境動態綁定的,而非函數被聲明時的環境。
this的指向大體能夠分爲如下四種:
◎ 做爲對象的方法調用
◎ 做爲普通函數調用
◎ 構造器調用
◎ Function.prototype.call或Function.prototype.apply調用數組

丟失的this:

var obj={
myName:"sven",
getName:function(){
    return this.myName;
}
}
console.log(obj.getName());//輸出:"sven"

var getName2 = obj.getName;
console.log(getName2());//輸出:"undefined"

分析:閉包

clipboard.png

驗證:app

//設置全局變量
var  myName = "Windows.name";
var obj={
myName:"sven",
getName:function(){
    return this.myName;
}
}
console.log(obj.getName());//輸出:"sven"

var getName2 = obj.getName;
console.log(getName2());//輸出:"Windows.name"

clipboard.png

apply和call方法的用法:

apply(obj,[argument1,argument2,….]) 接收兩個參數:【參數1】一個對象,用於指定this的指向,默認不設置或者設置爲null的狀況下指向的是window。【參數2】傳入參數的一個數組,參數個數是肯定的。
call(obj,argument1,argument2,….) 接收不肯定參數:【第一個參數】一個對象,用於指定this的指向,默認不設置或者設置爲null的狀況下指向的是window。【後面的參數】傳入的參數,參數個數是不肯定的。
代碼驗證:函數

clipboard.png

bind()的用法:

接着上面的代碼:this

clipboard.png

局部變量不被銷燬的緣由:

clipboard.png

利用閉包實現局部變量不被銷燬:

clipboard.png

相關文章
相關標籤/搜索