在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Java  HTML/ Javascript中this的問題?

Javascript中this的問題?

clipboard.png

clipboard.png

對這段話不是很理解 這個不是說this 引用的是函數(shù)的執(zhí)行環(huán)境么,test的執(zhí)行環(huán)境不應(yīng)該是wo();這個函數(shù)么 為啥會打印出red?

回答
編輯回答
互擼娃

1、列表項目判斷函數(shù)作用域可以把函數(shù)通過window.xx1.xx2()這樣表示一下,最后的xx2才是作用域

2、可以把wo理解成window.wo,所以執(zhí)行時的作用域時window

3、wo里面的test是簡單的函數(shù)調(diào)用,故作用域還是window

如果這樣改就是blue了:

wo.color='blue'
wo.test=function(){
    console.warn(this.color);
}
window.wo.test()

tip:最后執(zhí)行時wo點出來的,故執(zhí)行環(huán)境是wo

2017年4月21日 02:50
編輯回答
膽怯

alert(test())是window.alert(test())的簡寫,alert()是全局window的一方法,所以alert(test())是在alert()中執(zhí)行test(),其this指向當然是window啦!

2017年9月14日 17:05
編輯回答
葬憶

this指向當前調(diào)用對象。

2017年3月16日 13:46
編輯回答
疚幼

因為這里的this指向window,所以是red。
關(guān)于this指向的詳解:
(1)、處于全局作用域下的this:

this;/*window*/
var a = {name: this}/*window*/
var b = [this];/*window*/
在全局作用域下,this默認指向window對象。 

(2)、處在函數(shù)中的this,又分為以下幾種情況:
a、一般定義的函數(shù),然后一般的執(zhí)行:

var a = function(){
console.log(this);
}
a();/*window*/

this還是默認指向window。

b、一般定義,用new調(diào)用執(zhí)行:

var a = function(){
console.log(this);
}
new a();/*新建的空對象*/

這時候讓this指向新建的空對象,我們才可以給空對象初始化自有變量
c、作為對象屬性的函數(shù),調(diào)用時:

var a = {
f:function(){
console.log(this)
}
}
a.f();/*a對象*/

這時候this指向調(diào)用f函數(shù)的a對象。

(3)、通過call()和apply()來改變this的默認引用:

var b = {id: 'b'};
var a = {
f:function(){
console.log(this)
 }
}
a.f.call(b);/*window*/

所有函數(shù)對象都有的call方法和apply方法,它們的用法大體相似,f.call(b);的意思 是,執(zhí)行f函數(shù),并將f函數(shù)執(zhí)行期活動對象里的this指向b對象,這樣標示符解析時,this就會是b對象了。不過調(diào)用函數(shù)是要傳參的。所以,f.call(b, x, y); f.apply(b, [x, y]);好吧,以上就是用call方法執(zhí)行f函數(shù),與用apply方法執(zhí)行f函數(shù)時傳參方式,它們之間的差異,大家一目了然:apply通過數(shù)組的方式傳遞參數(shù),call通過一個個的形參傳遞參數(shù)。

(4)、一些函數(shù)特殊執(zhí)行情況this的指向問題:
a、setTimeout()和setInverval():

var a = function(){
console.log(this);
}
setTimeout(a,0);/*window*/
setInterval()類似。

b、dom模型中觸發(fā)事件的回調(diào)方法執(zhí)行中活動對象里的this指向該dom對象。

2018年7月10日 03:24
編輯回答
怪痞

理解下面的代碼,你就會明白,調(diào)用環(huán)境是什么意思了

var color="red";
//console.log(this);
var __GlobalThis=this;
function wo(){
    var color="blue";
    var _this=this;
    //console.log(_this);
    console.log("__GlobalThis===this(wo) is equal?"+(__GlobalThis===this));
    function test(){
        console.log("__GlobalThis===this(test) is equal?"+(__GlobalThis===this));
        return this.color;
    }
    test()
}

wo();

輸出:

__GlobalThis===this(wo) is equal?true
__GlobalThis===this(test) is equal?true
2018年4月1日 06:59
編輯回答
懶豬

簡單記住一句話就ok,函數(shù)調(diào)用this都是指向window。函數(shù)調(diào)用舉例:a()、b()等等,方法調(diào)用舉例:a.b()、b.c()等等...

2017年3月29日 07:57