第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

Js中this指向的問(wèn)題

Js中this指向的問(wèn)題

素胚勾勒不出你 2019-03-05 10:35:49
var b=25;var a={b:20,func: function(){return this.b;}}console.log(( a. func)())//20console.log(( a. func, a.func)())//25我覺(jué)得應(yīng)該都是25啊。。
查看完整描述

4 回答

?
茅侃侃

TA貢獻(xiàn)1842條經(jīng)驗(yàn) 獲得超22個(gè)贊

var b=25;

var a={

    b:20,

    func: function(){

    return this.b;

    }

}

console.log(( a. func)())//20 A

console.log(( a. func, a.func)())//25我覺(jué)得應(yīng)該都是25啊。。 B

這里涉及到2個(gè)運(yùn)算符的問(wèn)題,分組運(yùn)算符,逗號(hào)運(yùn)算符

分組運(yùn)算符對(duì)于其中的表達(dá)式運(yùn)算結(jié)果為reference類型的-引用類型的,不會(huì)執(zhí)行取值操作

逗號(hào)運(yùn)算符對(duì)其中的每一個(gè)表達(dá)式的都會(huì)執(zhí)行取值操作,并且返回最有一個(gè)表達(dá)式的值作為最終的計(jì)算結(jié)果

那么對(duì)于 A 語(yǔ)句


(a.func)();

的左邊括號(hào)就是個(gè)分組運(yùn)算符,a.func屬性訪問(wèn)表達(dá)式返回一個(gè)reference,分組運(yùn)算符不對(duì)拿到的引用執(zhí)行解引用操作,也就不取出實(shí)際指向的函數(shù)對(duì)象,還在a對(duì)象的環(huán)境下,接下來(lái)就對(duì)拿到的reference執(zhí)行調(diào)用,此時(shí)的this還是a對(duì)象。這個(gè)和


var p=a.func;

p();

不同的,賦值運(yùn)算符會(huì)對(duì)a.func求值。獲取函數(shù)對(duì)象,進(jìn)而賦值給p。p調(diào)用,this為為全局對(duì)象


對(duì)于 A 語(yǔ)句


(a.func, a.func)();

逗號(hào)運(yùn)算符,對(duì)a.func都會(huì)取出實(shí)際指向的函數(shù)對(duì)象,返回這個(gè)函數(shù)對(duì)象。右邊的括號(hào)為一個(gè)函數(shù)調(diào)用操作符,此時(shí)的this為全局對(duì)象。

代碼改成如下也是同樣的結(jié)果


(1, a.func)();

對(duì)于引用和解應(yīng)用,另一個(gè)操作符delete會(huì)給出更好的理解


delete a.func;

delete操作符下,a.func的運(yùn)算結(jié)果是返回一個(gè)reference而不是函數(shù)對(duì)象。也就是delete的不是指向的函數(shù)對(duì)象而是a.func本身


查看完整回答
反對(duì) 回復(fù) 2019-03-14
?
慕容708150

TA貢獻(xiàn)1831條經(jīng)驗(yàn) 獲得超4個(gè)贊

除了this指向還有一個(gè)逗號(hào)操作符的小知識(shí)

逗號(hào)操作符依次執(zhí)行返回最后一個(gè) 相當(dāng)于賦給匿名值后再操作


(a.func)(); //->  a.func() a調(diào)用this為a

//逗號(hào)操作符相當(dāng)于賦給匿名值后再操作

(a.func, a.func)(); //->  var c = a.func; c();   c()->window.c() window調(diào)用this為window


查看完整回答
反對(duì) 回復(fù) 2019-03-14
?
jeck貓

TA貢獻(xiàn)1909條經(jīng)驗(yàn) 獲得超7個(gè)贊

抽象下代碼,這樣好分析


var a = {

    func: function() {

        console.log(this);

    }

};

a.func();//1、a

(a.func)(); //2、 a

(a.func, a.func)(); //3、 window;

(a.func = a.func)(); // 4、window;

這里其實(shí)就是 this 的指向問(wèn)題;


1、在方法調(diào)用(如果某個(gè)對(duì)象的屬性是函數(shù),這個(gè)屬性就叫方法,調(diào)用這個(gè)屬性,就叫方法調(diào)用)中,執(zhí)行函數(shù)體的時(shí)候,作為屬性訪問(wèn)主體的對(duì)象和數(shù)組便是其調(diào)用方法內(nèi) this 的指向。通俗的說(shuō),調(diào)用誰(shuí)的方法 this 就指向誰(shuí);)


2、雖然加上括號(hào)之后,就好像只是在引用一個(gè)函數(shù),但 this 的值得到了維持,因?yàn)?a.func() 和 (a.func()) 的定義時(shí)相同的,按照 kikong 所說(shuō),就是 ()不對(duì)拿到的引用執(zhí)行解引用操作,也就不取出實(shí)際指向的函數(shù)對(duì)象,還在a對(duì)象的環(huán)境下,接下來(lái)就對(duì)拿到的reference執(zhí)行調(diào)用,此時(shí)的this還是a對(duì)象。


3、4、其實(shí)一樣,逗號(hào)運(yùn)算符、賦值運(yùn)算符都返回一個(gè)值,也就是保存在內(nèi)存中的函數(shù)本身,所以 this 的值不能得到維持,這是因?yàn)?/p>


this 對(duì)象是在運(yùn)行時(shí)基于函數(shù)的執(zhí)行環(huán)境綁定的:在全局函數(shù)中,this 等于window(瀏覽器非嚴(yán)格模式,嚴(yán)格模式是 undefined)

上面四個(gè)明白了,上面的題目就解開(kāi)了;this 更多了解 戳這


這里有個(gè)引申,按照上面的邏輯,所有返回值操作的,都有可能去改變上面代碼中的 this 值,都需要謹(jǐn)慎,譬如


var a = {

    func: function() {

        return this;

    }

};


function f(fn) {

    console.log(fn());

}


f(a.func);//window

因?yàn)楹瘮?shù)中的參數(shù)也是按照值傳遞的,在向參數(shù)傳遞引用類型的值時(shí),會(huì)把這個(gè)值在內(nèi)存中的地址復(fù)制給一個(gè)局部變量。


查看完整回答
反對(duì) 回復(fù) 2019-03-14
  • 4 回答
  • 0 關(guān)注
  • 559 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)