Javascript中的變量使用說明
更新時(shí)間:2010年05月18日 19:55:45 作者:
使用過javascript的朋友都知道,在javascript中,變量的使用是個(gè)比較頭疼的問題,經(jīng)常會(huì)產(chǎn)生 些比較匪夷所思的結(jié)果。究其原因,大多是對(duì)javascript的變量相關(guān)知識(shí)了解得不夠透徹。
javascript中的所有變量都是類型松散的,不同于其他面向?qū)ο笳Z音的變量聲明都是強(qiáng)類型的.因此Javascript 的變量聲明是不包括類型的。通過var關(guān)鍵字或者直接寫變量名來聲明一個(gè)變量,如:
var v = 1;
v=1;
這時(shí)有人可能會(huì)問,上述的兩種聲明有什么區(qū)別,為什 么會(huì)有這兩種不同的聲明方式,這就涉及到j(luò)avascript中變量的作用域了。在javascript中,變量的作用域包括全局和函數(shù)級(jí)別的。
全局變量可以聲明在函數(shù)體外,無論使用上述的哪種聲明方式,在函數(shù)體外 聲明的變量都是全局變量。如:
<script type="text/javascript" language="javascript">
var v = 1;
function foo()
{
alert(v);
}
w = 2;
function bar()
{
alert(w);
}
foo();
</script>
運(yùn)行結(jié)果:1 2
另外,在函數(shù)內(nèi)部聲明的變量如果不使用var關(guān)鍵字,聲明的變量也將是全局變量。如:
<script type="text/javascript" language="javascript">
function foo()
{
v = 1;
}
foo();
alert(v);
</script>
運(yùn)行結(jié)果:1
但是需要注意,這種情況下,若要使用變量,必須先調(diào)用聲明變量的函數(shù)對(duì)變量進(jìn)行初始化, 如foo(),否則,將會(huì)出現(xiàn)“變量v未定義”的錯(cuò)誤。
全局變量將作為window對(duì)象的屬性存在,因?yàn)榭梢?通過window.$($表示變量名)訪問。當(dāng)然也可以通過變量名直接訪問。下面會(huì)講到為什么有這兩種訪問方式。
在函數(shù)內(nèi)部通過var關(guān)鍵字聲明的變量將是函數(shù)級(jí)別的變量,其作用域僅僅限于函數(shù)內(nèi)部。如:
<script type="text/javascript" language="javascript">
function foo()
{
var v=1;
alert(v);
}
alert(v);
</script>
運(yùn)行結(jié)果:1 變量“v”未定義
通過上面的分析,可以發(fā)現(xiàn)關(guān)鍵字var主要作用 是定義函數(shù)級(jí)別的變量。
細(xì)心的朋友可以會(huì)問,如果在函數(shù)內(nèi)部和外部定義了相同的變量,會(huì)是什么樣的結(jié)果呢?如:
<script type="text/javascript" language="javascript">
var v=1;
function foo()
{
alert(v);
var v=2;
}
foo();
</script>
運(yùn)行結(jié)果:undefined
?。。。?!也許有人會(huì)比較郁悶了,v明明白白的定義在函數(shù)foo()體外,為什么會(huì)是 undefined呢?這就涉及到j(luò)avascript的解析了。根據(jù)經(jīng)驗(yàn),javascript對(duì)于函數(shù)體內(nèi)變量的解析過程是:
搜索所有的 var關(guān)鍵字,將其變量聲明放到函數(shù)體的最前面,賦值和使用仍然保持不變,這樣,上面的javascript實(shí)際上是等同于:
<script type="text/javascript" language="javascript">
var v=1;
function foo()
{
var v;
alert(v);
v=2;
}
foo();
</script>
照此分析,產(chǎn)生上述 的結(jié)果就顯而易見了,由于函數(shù)內(nèi)部的變量的優(yōu)先級(jí)高于全局變量的優(yōu)先級(jí)(大部分的編程語言都是這樣), 函數(shù)內(nèi)部的變量v覆蓋了全局變量v,但是由于在使用函數(shù)內(nèi)部變量v時(shí),它僅僅聲明,但未賦值,因此結(jié)果是undefined。
如果在方法 體內(nèi)仍然要使用定義的全局變量v,window對(duì)象此時(shí)派上大大的用場(chǎng)了,可以通過window.v來訪問。如:
<script type="text/javascript" language="javascript">
var v=1;
function foo()
{
alert(window.v);
alert(v);
var v=2;
}
foo();
</script>
運(yùn)行結(jié)果:2 undefined
var v = 1;
v=1;
這時(shí)有人可能會(huì)問,上述的兩種聲明有什么區(qū)別,為什 么會(huì)有這兩種不同的聲明方式,這就涉及到j(luò)avascript中變量的作用域了。在javascript中,變量的作用域包括全局和函數(shù)級(jí)別的。
全局變量可以聲明在函數(shù)體外,無論使用上述的哪種聲明方式,在函數(shù)體外 聲明的變量都是全局變量。如:
復(fù)制代碼 代碼如下:
<script type="text/javascript" language="javascript">
var v = 1;
function foo()
{
alert(v);
}
w = 2;
function bar()
{
alert(w);
}
foo();
</script>
運(yùn)行結(jié)果:1 2
另外,在函數(shù)內(nèi)部聲明的變量如果不使用var關(guān)鍵字,聲明的變量也將是全局變量。如:
復(fù)制代碼 代碼如下:
<script type="text/javascript" language="javascript">
function foo()
{
v = 1;
}
foo();
alert(v);
</script>
運(yùn)行結(jié)果:1
但是需要注意,這種情況下,若要使用變量,必須先調(diào)用聲明變量的函數(shù)對(duì)變量進(jìn)行初始化, 如foo(),否則,將會(huì)出現(xiàn)“變量v未定義”的錯(cuò)誤。
全局變量將作為window對(duì)象的屬性存在,因?yàn)榭梢?通過window.$($表示變量名)訪問。當(dāng)然也可以通過變量名直接訪問。下面會(huì)講到為什么有這兩種訪問方式。
在函數(shù)內(nèi)部通過var關(guān)鍵字聲明的變量將是函數(shù)級(jí)別的變量,其作用域僅僅限于函數(shù)內(nèi)部。如:
復(fù)制代碼 代碼如下:
<script type="text/javascript" language="javascript">
function foo()
{
var v=1;
alert(v);
}
alert(v);
</script>
運(yùn)行結(jié)果:1 變量“v”未定義
通過上面的分析,可以發(fā)現(xiàn)關(guān)鍵字var主要作用 是定義函數(shù)級(jí)別的變量。
細(xì)心的朋友可以會(huì)問,如果在函數(shù)內(nèi)部和外部定義了相同的變量,會(huì)是什么樣的結(jié)果呢?如:
復(fù)制代碼 代碼如下:
<script type="text/javascript" language="javascript">
var v=1;
function foo()
{
alert(v);
var v=2;
}
foo();
</script>
運(yùn)行結(jié)果:undefined
?。。。?!也許有人會(huì)比較郁悶了,v明明白白的定義在函數(shù)foo()體外,為什么會(huì)是 undefined呢?這就涉及到j(luò)avascript的解析了。根據(jù)經(jīng)驗(yàn),javascript對(duì)于函數(shù)體內(nèi)變量的解析過程是:
搜索所有的 var關(guān)鍵字,將其變量聲明放到函數(shù)體的最前面,賦值和使用仍然保持不變,這樣,上面的javascript實(shí)際上是等同于:
復(fù)制代碼 代碼如下:
<script type="text/javascript" language="javascript">
var v=1;
function foo()
{
var v;
alert(v);
v=2;
}
foo();
</script>
照此分析,產(chǎn)生上述 的結(jié)果就顯而易見了,由于函數(shù)內(nèi)部的變量的優(yōu)先級(jí)高于全局變量的優(yōu)先級(jí)(大部分的編程語言都是這樣), 函數(shù)內(nèi)部的變量v覆蓋了全局變量v,但是由于在使用函數(shù)內(nèi)部變量v時(shí),它僅僅聲明,但未賦值,因此結(jié)果是undefined。
如果在方法 體內(nèi)仍然要使用定義的全局變量v,window對(duì)象此時(shí)派上大大的用場(chǎng)了,可以通過window.v來訪問。如:
復(fù)制代碼 代碼如下:
<script type="text/javascript" language="javascript">
var v=1;
function foo()
{
alert(window.v);
alert(v);
var v=2;
}
foo();
</script>
運(yùn)行結(jié)果:2 undefined
相關(guān)文章
js實(shí)現(xiàn)checkbox全選和反選示例
這篇文章主要介紹了js實(shí)現(xiàn)checkbox全選和反選示例,需要的朋友可以參考下2014-05-05
Javascript數(shù)組Array基礎(chǔ)介紹
本文主要是給大家簡(jiǎn)單介紹了Array的相關(guān)基礎(chǔ)知識(shí),到這里也算是能對(duì)Array有更全面的理解了,希望大家能夠喜歡,后續(xù)我們將繼續(xù)介紹關(guān)于array的內(nèi)容。2016-03-03
Javascript中eval函數(shù)的使用方法與示例
JavaScript有許多小竅門來使編程更加容易。其中之一就是eval()函數(shù),這個(gè)函數(shù)可以把一個(gè)字符串當(dāng)作一個(gè)JavaScript表達(dá)式一樣去執(zhí)行它。以下是它的說明2007-04-04
javascript 進(jìn)階篇2 CSS XML學(xué)習(xí)
CSS我覺得應(yīng)該沒有不會(huì)的吧。。不過因?yàn)槲易约翰淮髸?huì)于是還是補(bǔ)在這里好了2012-03-03
slice函數(shù)的用法 之不錯(cuò)的應(yīng)用
slice函數(shù)的用法 之不錯(cuò)的應(yīng)用...2006-12-12
JavaScript DOM 學(xué)習(xí)第二章 編輯文本
在這一章我會(huì)給出一個(gè)在CMS里非常有用的更新頁面的代碼。在任一段落點(diǎn)擊鼠標(biāo)你就可以修改了。完成以后點(diǎn)擊按鈕,修改的文本就顯示了。2010-02-02
深入理解JavaScript中的塊級(jí)作用域、私有變量與模塊模式
本篇文章詳細(xì)的介紹了JavaScript中的塊級(jí)作用域、私有變量與模塊模式,詳細(xì)介紹了塊級(jí)作用域、私有變量與模塊模式,對(duì)學(xué)習(xí)JavaScript很有幫助。2016-10-10
JavaScript中二維數(shù)組的創(chuàng)建技巧
二維數(shù)組本質(zhì)上是以數(shù)組作為數(shù)組元素的數(shù)組,即"數(shù)組的數(shù)組",類型說明符 數(shù)組名[常量表達(dá)式][常量表達(dá)式]。二維數(shù)組又稱為矩陣,行列數(shù)相等的矩陣稱為方陣。對(duì)稱矩陣a[i][j] = a[j][i],對(duì)角矩陣:n階方陣主對(duì)角線外都是零元素2021-11-11
JavaScript字符串對(duì)象charAt方法入門實(shí)例(用于取得指定位置的字符)
這篇文章主要介紹了JavaScript字符串對(duì)象charAt方法入門實(shí)例,charAt方法用于取得指定位置的字符,需要的朋友可以參考下2014-10-10

