Javascript變量作用域詳解
變量的作用域指的是變量的可見(jiàn)性,而生命周期則(存活期)則是從另一個(gè)角度考察變量。
JS中變量的作用域分為全局變量和局部變量,函數(shù)內(nèi)定義的稱(chēng)為局部變量,函數(shù)外的稱(chēng)為全局變量。(“函數(shù)外的稱(chēng)為全局變量”是相對(duì)的,另此處討論的前提是用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中沒(méi)有塊級(jí)作用域,即用大括號(hào){}包含的。Java中則有。在main方法中寫(xiě)入下代碼
public static void main(String... args) {
for(int i=0;i<5;i++) {
}
{
int j=10;
}
int z = 20;
System.out.println(i); // i不可見(jiàn),語(yǔ)法分析時(shí)報(bào)錯(cuò),即編譯不通過(guò)
System.out.println(j); // j不可見(jiàn),語(yǔ)法分析時(shí)報(bào)錯(cuò),即編譯不通過(guò)
System.out.println(z); // z可見(jiàn),輸出20
}
但如果在JS中
for(var i=0;i<5;i++) {
}
var obj = {name:"Lily"};
for(var attr in obj) {
}
{
var j=10;
}
alert(i);//輸出4,沒(méi)有塊級(jí)作用域
alert(attr); //輸出name,沒(méi)有塊級(jí)作用域
alert(j);//輸出10,沒(méi)有塊級(jí)作用域
這也說(shuō)明一個(gè)問(wèn)題,避免在全局范圍內(nèi)使用for循環(huán)同時(shí)聲明變量,否則會(huì)造成全局命名范圍的污染。
當(dāng)然,JS1.7中提出了let關(guān)鍵字聲明變量(見(jiàn)https://developer.mozilla.org/cn/New_in_JavaScript_1.7),只作用于for語(yǔ)句范圍。
for(let i=0;i<5;i++) {
//todo
}
alert(i);//運(yùn)行時(shí)報(bào)錯(cuò),提示i未定義
JS1.7需要這樣引用 <script type="application/javascript;version=1.7"/></script>
ps:firefox2+實(shí)現(xiàn)了JS1.7
相關(guān)文章
JavaScript自定義Webpack配置實(shí)現(xiàn)流程介紹
本系列主要整理前端面試中需要掌握的知識(shí)點(diǎn)。本節(jié)介紹webpack如何優(yōu)化前端性能,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2022-10-10JsRender for object語(yǔ)法簡(jiǎn)介
這篇文章主要介紹了JsRender for object語(yǔ)法,以實(shí)例形式講述了for Object的用法,需要的朋友可以參考下2014-10-10JS實(shí)現(xiàn)的4種數(shù)字千位符格式化方法分享
這篇文章主要介紹了JS實(shí)現(xiàn)的4種數(shù)字千位符格式化方法分享,本文給出了4種千分位格式化方法并對(duì)它們的性能做了比較,需要的朋友可以參考下2015-03-03JavaScript將當(dāng)前時(shí)間轉(zhuǎn)換成UTC標(biāo)準(zhǔn)時(shí)間的方法
這篇文章主要介紹了JavaScript將當(dāng)前時(shí)間轉(zhuǎn)換成UTC標(biāo)準(zhǔn)時(shí)間的方法,涉及javascript中Date及toUTCString方法的使用技巧,需要的朋友可以參考下2015-04-04JS+canvas繪制的動(dòng)態(tài)機(jī)械表動(dòng)畫(huà)效果
這篇文章主要介紹了JS+canvas繪制的動(dòng)態(tài)機(jī)械表動(dòng)畫(huà)效果,涉及javascript結(jié)合HTML5 canvas簡(jiǎn)單數(shù)值計(jì)算與動(dòng)態(tài)繪圖相關(guān)操作技巧,需要的朋友可以參考下2017-09-09JS實(shí)現(xiàn)的冒泡排序,快速排序,插入排序算法示例
這篇文章主要介紹了JS實(shí)現(xiàn)的冒泡排序,快速排序,插入排序算法,結(jié)合實(shí)例形式分析了javascript冒泡排序,快速排序,插入排序算法的相關(guān)原理及實(shí)現(xiàn)方法,需要的朋友可以參考下2019-03-03js實(shí)現(xiàn)右下角可關(guān)閉最小化div(可用于展示推薦內(nèi)容)
使用Javascript實(shí)現(xiàn)右下角可關(guān)閉最小化div,可以用于展示推薦內(nèi)容,完整源代碼如下,感興趣的各位可以參下哈,希望對(duì)大家有所幫助2013-06-06微信小程序中使用 async/await的方法實(shí)例分析
這篇文章主要介紹了微信小程序中使用 async/await的方法,結(jié)合實(shí)例形式分析了微信小程序中async/await的功能、使用方法及操作注意事項(xiàng),需要的朋友可以參考下2020-05-05