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

JavaScript的變量聲明與聲明提前用法實(shí)例分析

 更新時(shí)間:2019年11月26日 09:57:38   作者:在線瘋狂  
這篇文章主要介紹了JavaScript的變量聲明與聲明提前用法,結(jié)合實(shí)例形式分析了JavaScript變量聲明與聲明提前相關(guān)原理、用法及操作注意事項(xiàng),需要的朋友可以參考下

本文實(shí)例講述了JavaScript的變量聲明與聲明提前用法。分享給大家供大家參考,具體如下:

JavaScript的變量聲明

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

向一個(gè)未聲明變量賦值會(huì)隱式地將其創(chuàng)建為一個(gè)全局變量(它變成了全局對(duì)象的一個(gè)屬性)。聲明變量與未聲明變量之間的區(qū)別為:

1. 聲明變量的作用范圍限定在其執(zhí)行的上下文環(huán)境中。未聲明的變量總是全局的。

function x() {
 y = 1;  // Throws a ReferenceError in strict mode
 var z = 2;
}
x();
console.log(y); // logs "1" 
console.log(z); // Throws a ReferenceError: z is not defined outside x

2. 聲明變量在其他代碼執(zhí)行之前創(chuàng)建。未聲明的變量在其賦值語句執(zhí)行之前都是不存在的。

console.log(a);        // Throws a ReferenceError.
console.log('still going...'); // Never executes.
var a;
console.log(a);        // logs "undefined" or "" depending on browser.
console.log('still going...'); // logs "still going...".

3. 聲明變量是執(zhí)行上下文(函數(shù)或者全局)的不可配置的屬性。而未聲明變量是可配置的(例如,可以被delete)

var a = 1;
b = 2;
delete this.a; // Throws a TypeError in strict mode. Fails silently otherwise.
delete this.b;
console.log(a, b); // Throws a ReferenceError. 
// The 'b' property was deleted and no longer exists.

由于以上三點(diǎn)不同,使用未聲明變量可能會(huì)帶來意想不到的結(jié)果。因此建議無論是全局變量還是局部變量,在使用前都要聲明。在ECMAScript5的嚴(yán)格模式下,對(duì)未聲明變量賦值會(huì)拋出一個(gè)錯(cuò)誤。

聲明提前(var hoisting):

JavaScript的函數(shù)作用域是指在函數(shù)內(nèi)聲明的所有變量在函數(shù)體內(nèi)是始終可見的。有趣的是,這意味著變量甚至可以先使用,后聲明。

JavaScript的這一特性被非正式地稱為聲明提前(hoiosting),即JavaScript函數(shù)中所有變量的聲明都被“提前”至函數(shù)體的頂部。

(“聲明提前”的操作是在JavaScript引擎的“預(yù)編譯”時(shí)進(jìn)行的,即在代碼運(yùn)行之前)

例如下面的JavaScript代碼:

var scope = "global";
function f() {
  alert(scope);
  var scope = "local"; //覆蓋全局變量
  alert(scope);
}

讀者可能誤以為函數(shù)f的第一個(gè)alert會(huì)輸出"global",因?yàn)榇a此時(shí)還沒有執(zhí)行到var語句聲明局部變量的代碼行。

其實(shí)不然,由于函數(shù)作用域的特性,局部變量在整個(gè)函數(shù)體內(nèi)始終是有定義的,亦即,在函數(shù)體內(nèi)局部變量覆蓋了同名的全局變量。盡管如此,只有程序執(zhí)行到var語句時(shí),局部變量才會(huì)被賦值。因此上述過程等價(jià)于,將函數(shù)體內(nèi)的變量聲明“提前”至函數(shù)體頂部,而變量的初始化保留在原處。

function f() {
  var scope; //函數(shù)體頂部聲明局部變量
  alert(scope); //輸出"undefined"
  scope = "local"; //變量初始化賦值
  alert(scope); //輸出"local"
}

基于此原因,建議將變量的聲明都放在作用域的頂部(全局代碼的頂端,或者函數(shù)代碼的開始),從而清楚地區(qū)分變量的作用域,哪些是函數(shù)作用域,哪些在作用域鏈上解析。

參考資料:

1. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/var

2. 《JavaScript權(quán)威指南》 第6版 中文版

更多關(guān)于JavaScript相關(guān)內(nèi)容可查看本站專題:《JavaScript常用函數(shù)技巧匯總》、《javascript面向?qū)ο笕腴T教程》、《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)

希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。

相關(guān)文章

  • 詳解如何在微信小程序中愉快地使用sass

    詳解如何在微信小程序中愉快地使用sass

    這篇文章主要介紹了詳解如何在微信小程序中愉快地使用sass,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • js找出5個(gè)數(shù)中最大的一個(gè)數(shù)和倒數(shù)第二大的數(shù)實(shí)現(xiàn)方法示例小結(jié)

    js找出5個(gè)數(shù)中最大的一個(gè)數(shù)和倒數(shù)第二大的數(shù)實(shí)現(xiàn)方法示例小結(jié)

    這篇文章主要介紹了js找出5個(gè)數(shù)中最大的一個(gè)數(shù)和倒數(shù)第二大的數(shù)實(shí)現(xiàn)方法,結(jié)合實(shí)例形式總結(jié)分析了JavaScript數(shù)組遍歷、排序、判斷、比較等相關(guān)操作技巧,需要的朋友可以參考下
    2020-03-03
  • JS基于ES6新特性async await進(jìn)行異步處理操作示例

    JS基于ES6新特性async await進(jìn)行異步處理操作示例

    這篇文章主要介紹了JS基于ES6新特性async await進(jìn)行異步處理操作,結(jié)合實(shí)例形式分析了async await進(jìn)行異步處理操作的相關(guān)原理、步驟與注意事項(xiàng),需要的朋友可以參考下
    2019-02-02
  • js放到head中失效的原因與解決方法

    js放到head中失效的原因與解決方法

    本文主要介紹了js放到head中有時(shí)候會(huì)失效的原因以及解決方法,具有很好的參考價(jià)值。下面跟著小編一起來看下吧
    2017-03-03
  • 簡單了解Javscript中兄弟ifream的方法調(diào)用

    簡單了解Javscript中兄弟ifream的方法調(diào)用

    這篇文章主要介紹了簡單了解Javscript中兄弟ifream的方法調(diào)用文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下
    2019-06-06
  • Javascript數(shù)據(jù)結(jié)構(gòu)與算法之列表詳解

    Javascript數(shù)據(jù)結(jié)構(gòu)與算法之列表詳解

    這篇文章主要介紹了Javascript數(shù)據(jù)結(jié)構(gòu)與算法之列表詳解,本文講解了列表的抽象數(shù)據(jù)類型定義、如何實(shí)現(xiàn)列表類等內(nèi)容,需要的朋友可以參考下
    2015-03-03
  • JavaScript Array對(duì)象使用方法解析

    JavaScript Array對(duì)象使用方法解析

    這篇文章主要介紹了JavaScript Array對(duì)象使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • 微信小程序?qū)崿F(xiàn)多列選擇器

    微信小程序?qū)崿F(xiàn)多列選擇器

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)多列選擇器,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • laypage.js分頁插件使用方法詳解

    laypage.js分頁插件使用方法詳解

    這篇文章主要為大家詳細(xì)介紹了laypage.js分頁插件的使用方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • js實(shí)現(xiàn)雙色球效果

    js實(shí)現(xiàn)雙色球效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)雙色球效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08

最新評(píng)論

武安市| 六枝特区| 秭归县| 仙桃市| 望谟县| 高雄市| 根河市| 福州市| 浙江省| 长沙市| 客服| 沧州市| 余干县| 兴山县| 峡江县| 浪卡子县| 房产| 五原县| 福贡县| 德格县| 冷水江市| 泾川县| 兴隆县| 同仁县| 康马县| 祁阳县| 和平区| 海口市| 长春市| 白河县| 连州市| 门头沟区| 巴青县| 额济纳旗| 紫云| 宁陵县| 油尖旺区| 保靖县| 西乌| 肥城市| 彭山县|