JavaScript中,在全域宣告全域變數後,會成為全域物件的一個同名屬性。但在函數中宣告局部變數後,卻不會成為函數(物件)的屬性,而是要使用「函數名稱.屬性名稱」才能聲明,請問是什麼原因?
可以這樣理解:
在函數內部宣告的變數屬於函數執行上下文對象,而不是函數對象全域環境下宣告的變數屬於全域執行上下文對象,這個上下文對象就是全域環境對象
哪有什麼原因,規定就是這樣的。
歷史遺留問題,建議使用嚴格模式消除迷惑。
'use strict'; var v = 2; console.log(window.v); // undefined
如果你是說這樣`function test(){
var a = 1; // 你说的a是test的属性。 this.a = 1;// 这才是函数的属性,因为在JS里,“万物”皆对象(可能夸张了。) //如果,还不明白,请自觉翻阅,“神奇的this”,"作用域"等基础JS章节
}`//更新,錯誤改正。 題主好好看基礎。
我認為這就是函數變數的作用域問題,js是很靈活的,還望一起學習^~^ ^~^
JavaScript中,在全域宣告全域變數後,會成為全域物件的一個同名屬性。在函數中宣告局部變數後,它變成局部對象,也就是函數的屬性,所以要先透過全域存取函數再存取函數中的局部變數。
函數作用域啊
可以這樣理解:
在函數內部宣告的變數屬於函數執行上下文對象,而不是函數對象
全域環境下宣告的變數屬於全域執行上下文對象,這個上下文對象就是全域環境對象
哪有什麼原因,規定就是這樣的。
歷史遺留問題,建議使用嚴格模式消除迷惑。
如果你是說這樣
`function test(){
}`
//更新,錯誤改正。
題主好好看基礎。
我認為這就是函數變數的作用域問題,js是很靈活的,還望一起學習^~^ ^~^
JavaScript中,在全域宣告全域變數後,會成為全域物件的一個同名屬性。在函數中宣告局部變數後,它變成局部對象,也就是函數的屬性,所以要先透過全域存取函數再存取函數中的局部變數。
函數作用域啊