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