JavaScript在全局對(duì)象中聲明變量,會(huì)成為一個(gè)全局對(duì)象的同名屬性而在函數(shù)中聲明變量則不會(huì),為什么?
問(wèn)題描述
JavaScript中,在全局聲明全局變量后,會(huì)成為全局對(duì)象的一個(gè)同名屬性。但在函數(shù)中聲明局部變量后,卻不會(huì)成為函數(shù)(對(duì)象)的屬性,而是要使用“函數(shù)名.屬性名”才能聲明,請(qǐng)問(wèn)是什么原因?
問(wèn)題解答
回答1:可以這樣理解:
在函數(shù)內(nèi)部聲明的變量屬于函數(shù)執(zhí)行上下文對(duì)象,而不是函數(shù)對(duì)象全局環(huán)境下聲明的變量屬于全局執(zhí)行上下文對(duì)象,這個(gè)上下文對(duì)象就是全局環(huán)境對(duì)象
回答2:哪有什么原因,規(guī)定就是這樣的。
回答3:歷史遺留問(wèn)題,建議使用嚴(yán)格模式消除迷惑。
’use strict’;var v = 2;console.log(window.v); // undefined回答4:
如果你是說(shuō)這樣`function test(){
var a = 1; // 你說(shuō)的a是test的屬性。 this.a = 1;// 這才是函數(shù)的屬性,因?yàn)樵贘S里,“萬(wàn)物”皆對(duì)象(可能夸張了。) //如果,還不明白,請(qǐng)自覺(jué)翻閱,“神奇的this”,'作用域'等基礎(chǔ)JS章節(jié)
}`//更新,錯(cuò)誤改正。題主好好看基礎(chǔ)。
回答5:我認(rèn)為這就是函數(shù)變量的作用域問(wèn)題,js是很靈活的,還望一起學(xué)習(xí)^~^ ^~^
回答6:JavaScript中,在全局聲明全局變量后,會(huì)成為全局對(duì)象的一個(gè)同名屬性。在函數(shù)中聲明局部變量后,它就變成局部對(duì)象,也就是函數(shù)的屬性,所以要先通過(guò)全局訪問(wèn)函數(shù)再訪問(wèn)函數(shù)中的局部變量。
回答7:函數(shù)作用域啊
