Javascript變量作用域詳解
變量的作用域指的是變量的可見性,而生命周期則(存活期)則是從另一個角度考察變量。
JS中變量的作用域分為全局變量和局部變量,函數(shù)內(nèi)定義的稱為局部變量,函數(shù)外的稱為全局變量。(“函數(shù)外的稱為全局變量”是相對的,另此處討論的前提是用var顯式聲明的變量,函數(shù)內(nèi)不用var定義的變量默認(rèn)是全局變量,當(dāng)然忽略var聲明變量是不贊成的)。
var glob = 4;//函數(shù)外聲明全局變量
function fun() {
var height = 20; //函數(shù)內(nèi)用var聲明的是局部變量
weight = 50; //函數(shù)內(nèi)不用var聲明的是全局變量
}
fun();
alert(weight);
JS中沒有塊級作用域,即用大括號{}包含的。Java中則有。在main方法中寫入下代碼
public static void main(String... args) {
for(int i=0;i<5;i++) {
}
{
int j=10;
}
int z = 20;
System.out.println(i); // i不可見,語法分析時報錯,即編譯不通過
System.out.println(j); // j不可見,語法分析時報錯,即編譯不通過
System.out.println(z); // z可見,輸出20
}
但如果在JS中
for(var i=0;i<5;i++) {
}
var obj = {name:"Lily"};
for(var attr in obj) {
}
{
var j=10;
}
alert(i);//輸出4,沒有塊級作用域
alert(attr); //輸出name,沒有塊級作用域
alert(j);//輸出10,沒有塊級作用域
這也說明一個問題,避免在全局范圍內(nèi)使用for循環(huán)同時聲明變量,否則會造成全局命名范圍的污染。
當(dāng)然,JS1.7中提出了let關(guān)鍵字聲明變量(見https://developer.mozilla.org/cn/New_in_JavaScript_1.7),只作用于for語句范圍。
for(let i=0;i<5;i++) {
//todo
}
alert(i);//運行時報錯,提示i未定義
JS1.7需要這樣引用 <script type="application/javascript;version=1.7"/></script>
ps:firefox2+實現(xiàn)了JS1.7
相關(guān)文章
基于javascript實現(xiàn)按圓形排列DIV元素(一)
本篇文章主要介紹基于javascript實現(xiàn)按圓形排列DIV元素的方法,此文著重于介紹對實現(xiàn)的按圓形排列DIV元素的分析,需要的朋友來看下吧2016-12-12
JS?中的類Public,Private?和?Protected詳解
這篇文章主要介紹了JS中的類Public,Private和Protected詳解,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下2022-08-08
JS實現(xiàn)轉(zhuǎn)動隨機數(shù)抽獎特效代碼
這篇文章主要為大家詳細(xì)介紹了一款轉(zhuǎn)動隨機數(shù)抽獎的JS特效代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2015-08-08

