var foo = 1;function main() { console.log(foo); var foo = 2; console.log(this.foo); this.foo = 3;}new main();為什么兩個輸出都是undefined使用main()的時候,第二個輸出是1,是有值的,現在實例化后,為什么就沒有了?解析:使用main()調用本函數時,main()函數內的第一個輸出console.log(foo)的時候,第二行的var foo = 2對于foo的定義提升了,但是還沒有賦值,所以輸出是undefined第二個輸出console.log(this.foo) 的時候,this.foo的環境變量是window,所以輸出是1使用new main()實例化main()后,函數內的第一個輸出console.log(foo)的時候,也是因為foo定義提升了,但是沒有賦值,所以還是undefined第二個console.log(this.foo)為什么是undefined呢,原因在于使用new實例化后,this會指向當前對象,而main()函數內的this.foo=3賦值也是在console.log(this.foo)之后,所以也是undefinedvar foo = 1;function main() { console.log(foo); // undefined var foo = 2; console.log(foo); // 2 console.log(this.foo); // undefined this.foo = 3; console.log(this.foo); // 3}new main();
關于JS函數實例化后的內部變量,為什么輸出是undefined?
慕尼黑8549860
2018-12-26 17:14:33