最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺析JavaScript聲明變量

 更新時(shí)間:2015年12月21日 09:12:39   作者:jerrylsxu  
JavaScript的變量聲明語(yǔ)句無(wú)論出現(xiàn)在何處,都會(huì)先于其他代碼首先被執(zhí)行,本文給大家介紹javascript聲明變量相關(guān)知識(shí),感興趣的朋友一起學(xué)習(xí)吧

JavaScript的變量聲明語(yǔ)句無(wú)論出現(xiàn)在何處,都會(huì)先于其他代碼首先被執(zhí)行。使用var關(guān)鍵詞聲明變量的作用域是當(dāng)前的執(zhí)行上下文,有可能是外圍函數(shù),或者,當(dāng)變量聲明在函數(shù)體之外時(shí),則為全局變量。

定義在函數(shù)體外的都屬于全局變量,定義在函數(shù)體內(nèi)的屬于局部變量。這里的定義是指通過(guò)var聲明的。

JavaScript有隱含的全局概念,意味著你不聲明的任何變量都會(huì)成為一個(gè)全局對(duì)象屬性。例如:

function test(){
myname = "huming";
alert(myname);
}
test();  // "huming"
alert(myname);  //"huming" 

兩個(gè)結(jié)果是一樣的,說(shuō)明myname是一個(gè)全局變量。

那么,隱式全局變量和明確定義的全局變量有沒(méi)有區(qū)別呢。。答案肯定是有的,看下面的例子:

// 定義三個(gè)全局變量
var global_test = ;
global_test = ; // 反面教材
(function () {
global_test = ; // 反面教材
}());
// 試圖刪除
delete global_test; // false
delete global_test; // true
delete global_test; // true
// 測(cè)試該刪除
alert(typeof global_test); // "number"
alert(typeof global_test); // "undefined"
alert(typeof global_test); // "undefined" 

由上面的例子可以看出:在函數(shù)之外通過(guò)var定義的global_test1不能被刪除,而沒(méi)有經(jīng)過(guò)var定義的global_test2和global_test3都被刪除了(無(wú)論是否是在函數(shù)體內(nèi)創(chuàng)建)。

總結(jié)來(lái)說(shuō),在函數(shù)體外通過(guò)var聲明的全局變量不能被刪除,而隱式全局變量是可以刪除的。

這里要注意了:JavaScript有一種行為叫做“hoisting”(懸置/置頂解析/預(yù)解析)。

我們通過(guò)一個(gè)例子來(lái)說(shuō)明:

var myname = "huming"; //聲明全局變量
function test() {
alert(myname);
var myname = "local_huming";
alert(myname);
}
test();

你猜兩次alert的內(nèi)容一致嗎??顯然不一致,一致還用說(shuō)嗎。。實(shí)際輸出是:"undefined", "local_huming"。

上面的例子等同于

var myname = "huming"; //聲明全局變量
function test() {
  var myname;
  alert(maname);<br>  myname = "local_huming";
  alert(myname); // "local"
}
test(); 

第一次alert輸出的myname并不是你以為的全局變量,而是和它在一個(gè)作用域(一個(gè)函數(shù)體)內(nèi)的局部變量。雖然它還沒(méi)有被聲明,但被當(dāng)作是聲明了。這就是所謂的“hoisting”。

這樣應(yīng)該就明白了吧。當(dāng)你在函數(shù)體中使用了一個(gè)變量,又在之后重新聲明的話,就可能產(chǎn)生錯(cuò)誤。

書(shū)寫規(guī)范:

function test() {
var a = ,
b = ,
c = a + b,
d = {},
e,
f;
// function body...
}

好處在于:

1、所有局部變量都定義在函數(shù)開(kāi)始,方便查找;

2、防止變量在定義之前使用的邏輯錯(cuò)誤。

在javascript中,一個(gè)變量名(name)有四種方式進(jìn)入作用域(scope)中

語(yǔ)言內(nèi)置,所有的作用域中都有this和arguments關(guān)鍵字

形式參數(shù),函數(shù)的參數(shù)在整個(gè)作用域中都是有效的

函數(shù)聲明

變量聲明

上面列出的四種順序也正是由高到底的優(yōu)先級(jí)的順序,一旦一個(gè)變量名已經(jīng)聲明了,那么它就不可能被其他更低優(yōu)先級(jí)的變量聲明形式所覆蓋。

相關(guān)文章

  • 對(duì)于JavaScript繼承你到底了解多少

    對(duì)于JavaScript繼承你到底了解多少

    js的繼承機(jī)制不同于傳統(tǒng)的面向?qū)ο笳Z(yǔ)言,采用原型鏈實(shí)現(xiàn)繼承,基本思想是利用原型讓一個(gè)引用類型繼承另一個(gè)引用類型的屬性和方法,下面這篇文章主要給大家介紹了關(guān)于JS繼承的相關(guān)資料,需要的朋友可以參考下
    2021-09-09
  • 微信小程序?qū)崿F(xiàn)頁(yè)面監(jiān)聽(tīng)自定義組件的觸發(fā)事件

    微信小程序?qū)崿F(xiàn)頁(yè)面監(jiān)聽(tīng)自定義組件的觸發(fā)事件

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)頁(yè)面監(jiān)聽(tīng)自定義組件的觸發(fā)事件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • JavaScript之DOM插入更新刪除_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    JavaScript之DOM插入更新刪除_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了JavaScript之DOM插入更新刪除,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • javascript最短的拖動(dòng)代碼[兼容FF]

    javascript最短的拖動(dòng)代碼[兼容FF]

    javascript最短的拖動(dòng)代碼[兼容FF]...
    2007-10-10
  • layui動(dòng)態(tài)表頭的實(shí)現(xiàn)代碼

    layui動(dòng)態(tài)表頭的實(shí)現(xiàn)代碼

    這篇文章主要介紹了layui動(dòng)態(tài)表頭的實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • js 文件引入實(shí)現(xiàn)代碼

    js 文件引入實(shí)現(xiàn)代碼

    項(xiàng)目前端的文件和后臺(tái)開(kāi)發(fā)分離,只要后臺(tái)開(kāi)發(fā)更新svn前端的js,css文件都會(huì)更新,以前引用的是一個(gè)js文件如AA.js,由于想在項(xiàng)目中引用jquery庫(kù),如果在每個(gè)文件的頭部都引讓他們從新寫入這個(gè)jq文件不太可能
    2010-04-04
  • js判斷上傳文件類型判斷FileUpload文件類型代碼

    js判斷上傳文件類型判斷FileUpload文件類型代碼

    這篇文章主要介紹了js判斷上傳文件類型判斷FileUpload文件類型代碼,需要的朋友可以參考下
    2014-05-05
  • 基于javascript的無(wú)縫滾動(dòng)動(dòng)畫實(shí)現(xiàn)2

    基于javascript的無(wú)縫滾動(dòng)動(dòng)畫實(shí)現(xiàn)2

    這篇文章主要介紹了基于javascript的無(wú)縫滾動(dòng)動(dòng)畫實(shí)現(xiàn)2,文章通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08
  • Three.js利用頂點(diǎn)繪制立方體的方法詳解

    Three.js利用頂點(diǎn)繪制立方體的方法詳解

    最近在學(xué)習(xí)three.js,將學(xué)習(xí)中遇到的知識(shí)點(diǎn)總結(jié)分享出來(lái),下面這篇文章主要給大家介紹了關(guān)于Three.js利用頂點(diǎn)繪制立方體的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2017-09-09
  • toString.call()通用的判斷數(shù)據(jù)類型方法示例

    toString.call()通用的判斷數(shù)據(jù)類型方法示例

    這篇文章主要給大家介紹了關(guān)于toString.call()通用的判斷數(shù)據(jù)類型方法的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-08-08

最新評(píng)論

阳春市| 汉沽区| 澎湖县| 云南省| 土默特左旗| 恩施市| 仁怀市| 玉林市| 岳池县| 莱州市| 上虞市| 芮城县| 札达县| 华阴市| 淮阳县| 东阿县| 大兴区| 汽车| 加查县| 昭平县| 济南市| 天气| 石首市| 瑞金市| 响水县| 贵州省| 扎赉特旗| 蓝山县| 西贡区| 颍上县| 建水县| 泰和县| 都匀市| 汪清县| 治多县| 昌宁县| 周口市| 太保市| 通榆县| 咸宁市| 儋州市|