JavaScript在全域物件中宣告變數,會成為一個全域物件的同名屬性而在函數中宣告變數則不會,為什麼?
仅有的幸福
仅有的幸福 2017-06-26 10:58:35
0
7
923

JavaScript中,在全域宣告全域變數後,會成為全域物件的一個同名屬性。但在函數中宣告局部變數後,卻不會成為函數(物件)的屬性,而是要使用「函數名稱.屬性名稱」才能聲明,請問是什麼原因?

仅有的幸福
仅有的幸福

全部回覆(7)
洪涛

可以這樣理解:

在函數內部宣告的變數屬於函數執行上下文對象,而不是函數對象
全域環境下宣告的變數屬於全域執行上下文對象,這個上下文對象就是全域環境對象

我想大声告诉你

哪有什麼原因,規定就是這樣的。

巴扎黑

歷史遺留問題,建議使用嚴格模式消除迷惑。

'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中,在全域宣告全域變數後,會成為全域物件的一個同名屬性。在函數中宣告局部變數後,它變成局部對象,也就是函數的屬性,所以要先透過全域存取函數再存取函數中的局部變數。

typecho

函數作用域啊

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板