老師問下<不好意思視頻出了這么久我還提問> 構造函數的屬性《例如 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();
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();
2016-09-11
舉報
2017-10-15
剖析僅使用new main();的情況:
代碼運行前首先創建全局上下文環境(按照課程說明先查詢函數后查詢變量)
運行時從上到下執行賦值語句:
跳過main函數中的內容直接執行到new main();代碼運行前首先創建函數上下文環境
由于var foo...與function foo()...同名,根據課程所述忽略變量foo
運行時從上到下執行賦值語句:
由于this中沒有屬性foo,console.log(this.foo)自然為undefined。若有誤,望指正。
我不清楚樓上怎么理解為function foo()被提前的.....
2016-09-12
謝了 ? ,我想問的是使用new時 ?this.foo是怎么預編譯的?按控制臺的答案是另外初始化了一個變量?
2016-09-11
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,這是我自己的理解,希望對你有幫助,有錯誤望老師糾正~