亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

老師問下<不好意思視頻出了這么久我還提問>  構造函數的屬性《例如 this.name是怎么預編譯的》?

var foo = 1;

function main (){ console.log(foo); var foo = 2; function foo (){ console.log(foo); } console.log(this.foo); this.foo = 3; console.log(this.foo); }

?main();

?new main();

正在回答

3 回答

剖析僅使用new main();的情況

代碼運行前首先創建全局上下文環境(按照課程說明先查詢函數后查詢變量)

[global]?=?{
main:function,
foo:undefined
this:window
}

運行時從上到下執行賦值語句:

[global]?=?{
main:function,
foo:1
this:window
}

跳過main函數中的內容直接執行到new main();代碼運行前首先創建函數上下文環境

[main]?=?{
foo?=?function
this:new?Object()
}

由于var foo...與function foo()...同名,根據課程所述忽略變量foo

運行時從上到下執行賦值語句:

[main]?=?{
foo:2
this:new?Object()
}

由于this中沒有屬性foo,console.log(this.foo)自然為undefined。若有誤,望指正。

我不清楚樓上怎么理解為function foo()被提前的.....

0 回復 有任何疑惑可以回復我~

謝了 ? ,我想問的是使用new時 ?this.foo是怎么預編譯的?按控制臺的答案是另外初始化了一個變量?

0 回復 有任何疑惑可以回復我~

var foo = 1;

function main (){

?????????????? console.log(foo);????????????????? //? function foo ()

?????????????? var foo = 2;

?????????????? function foo (){

???????????????????????????? console.log(foo);

?????????????? }

?????????????? console.log(this.foo);????????? //? ?main();時為1????new main();時為undefined

?????????????? this.foo = 3;

?????????????? console.log(this.foo);???????? //?? 3

}

?main();

?new main();


當用new來構造函數時,this的指向是?new main()的原型main();,this.foo就是main()中的function foo(),而變量申明var foo = 2;因為和function foo()重復,就會被忽略,在執行上下文時function foo ()會被提前,值暫時為undefined,所以console.log(this.foo);會返回undefined,這是我自己的理解,希望對你有幫助,有錯誤望老師糾正~

1 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消

老師問下<不好意思視頻出了這么久我還提問>  構造函數的屬性《例如 this.name是怎么預編譯的》?

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號