国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

不錯(cuò)的JS中變量相關(guān)的細(xì)節(jié)分析

2024-09-06 12:41:48
字體:
供稿:網(wǎng)友
這里討論一下我對(duì)Javascript中變量相關(guān)細(xì)節(jié)的認(rèn)識(shí),有不當(dāng)之處歡迎來批。

  一、變量的類型
  Javascript和Java、C這些語言不同,它是一種無類型、弱檢測(cè)的語言。它對(duì)變量的定義并不需要聲明變量類型,我們只要通過賦值的形式,可以將各種類型的數(shù)據(jù)賦值給同一個(gè)變量。例如:


i=100;//Number類型
i="variable";//String類型
i={x:4};//Object類型
i=[1,2,3];//Array類型

  JS的這種特性雖然讓我們的編碼更加靈活,但也帶來了一個(gè)弊端,不利于Debug,編譯器的弱檢測(cè)讓我們維護(hù)冗長的代碼時(shí)相當(dāng)痛苦。

  二、變量的聲明
  JS中變量申明分顯式申明和隱式申明。


  var i=100;//顯式申明
i=100;//隱式申明

  在函數(shù)中使用var關(guān)鍵字進(jìn)行顯式申明的變量是做為局部變量,而沒有用var關(guān)鍵字,使用直接賦值方式聲明的是全局變量。   

  當(dāng)我們使用訪問一個(gè)沒有聲明的變量時(shí),JS會(huì)報(bào)錯(cuò)。而當(dāng)我們給一個(gè)沒有聲明的變量賦值時(shí),JS不會(huì)報(bào)錯(cuò),相反它會(huì)認(rèn)為我們是要隱式申明一個(gè)全局變量,這一點(diǎn)一定要注意。


  三、全局變量和局部變量
  當(dāng)JS解析器執(zhí)行時(shí),首先就會(huì)在執(zhí)行環(huán)境里構(gòu)建一個(gè)全局對(duì)象,我們定義的全局屬性就是做為該對(duì)象的屬性讀取,在頂層代碼中我們使用this關(guān)鍵字和window對(duì)象都可以訪問到它。而函數(shù)體中的局部變量只在函數(shù)執(zhí)行時(shí)生成的調(diào)用對(duì)象中存在,函數(shù)執(zhí)行完畢時(shí)局部變量即刻銷毀。因此在程序設(shè)計(jì)中我們需要考慮如何合理聲明變量,這樣既減小了不必要的內(nèi)存開銷,同時(shí)能很大程度地避免變量重復(fù)定義而覆蓋先前定義的變量所造成的Debug麻煩。

  四、變量作用域
  任何程序語言中變量的作用域都是一個(gè)很關(guān)鍵的細(xì)節(jié)。JS中變量的作用域相對(duì)與JAVA、C這類語言顯得更自由,一個(gè)很大的特征就是JS變量沒有塊級(jí)作用域,函數(shù)中的變量在整個(gè)函數(shù)都中有效,運(yùn)行下面代碼:


<SCRIPT LANGUAGE="JavaScript" type="text/javascript">
//定義一個(gè)輸出函數(shù)
function outPut(s){
document.writeln(s)
}
//全局變量
var i=0;
//定義外部函數(shù)
function outer(){
//訪問全局變量
outPut(i); // 0
//定義一個(gè)類部函數(shù)
function inner(){
//定義局部變量
var i = 1;
// i=1; 如果用隱式申明 那么就覆蓋了全局變量i
outPut(i); //1
}
inner();
outPut(i); //0
}
outer();
</SCRIPT>

  輸出結(jié)果為0 1 0,從上面就可以證明JS如果用var在函數(shù)體中聲明變量,那么此變量在且只在該函數(shù)體內(nèi)有效,函數(shù)運(yùn)行結(jié)束時(shí),本地變量即可銷毀了。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 聂拉木县| 灵山县| 乐陵市| 文成县| 吐鲁番市| 蓬莱市| 建昌县| 万安县| 泉州市| 巴楚县| 宝清县| 连江县| 孟州市| 广水市| 开平市| 遂川县| 苏尼特右旗| 大兴区| 三门峡市| 封丘县| 西华县| 天台县| 西藏| 大洼县| 邛崃市| 兰考县| 福州市| 连平县| 灵台县| 枞阳县| 盐亭县| 土默特右旗| 绥化市| 昆山市| 荆州市| 郑州市| 江山市| 兴城市| 修文县| 富阳市| 博乐市|