欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript?變量聲明?var,let,const?的區(qū)別

 更新時(shí)間:2022年06月01日 08:52:38   作者:天行無忌  
這篇文章主要介紹了javascript?變量聲明?var,let,const?的區(qū)別,變量聲明,每種編程語言必不可少的語法,在javascript中,變量的聲明相對(duì)其他語言來說,算是比較簡(jiǎn)單的。更多相關(guān)的具體內(nèi)容需要的小伙伴可以參考一下

作用域(Scope)是什么

作用域是程序的執(zhí)行環(huán)境,它包含在當(dāng)前位置可訪問的變量和函數(shù)。在 ES5 語法中,有全局作用域和局部作用域,ES6 則新增了塊級(jí)作用域。

全局作用域是最外層的作用域,在函數(shù)外面定義的變量屬于全局作用域,可以被任何其他子作用域訪問。在瀏覽器中,window 對(duì)象就是全局作用域。在編寫前端代碼過程中,其中有一條優(yōu)化規(guī)則就是少使用全局變量,因?yàn)槿肿兞咳菀讓?dǎo)致程序BUG,并且不容易查找。

局部作用域的基本單元是 function,只在函數(shù)體內(nèi)有效。局部作用域是在函數(shù)內(nèi)部的作用域。在局部作用域定義的變量只能在該作用域以及其子作用域被訪問。

javascript中,變量聲明使用 var、const、let來聲明變量,var為ES5的語法,constlet為ES6之后的語法。ES6 的letconst為新引入的關(guān)鍵字,它們不會(huì)被提升,而且是塊作用域。也就是說被大括號(hào)包圍起來的區(qū)域聲明的變量外部將不可訪問。

下面我們就來說說各自的區(qū)別。

var 聲明

var聲明,為ES5的語法,var聲明的變量總是歸屬于包含函數(shù)(即全局,如果在最頂層的話)。在 javaScript 函數(shù)內(nèi)部聲明的變量(使用 var)是局部變量,所以只能在函數(shù)內(nèi)部訪問它(該變量的作用域是局部的)??梢栽诓煌暮瘮?shù)中使用名稱相同的局部變量,因?yàn)橹挥新暶鬟^該變量的函數(shù)才能識(shí)別出該變量。

提升(Hoisting)

在編譯過程中,將varfunction的定義移動(dòng)到他們作用域最前面的行為叫做提升。

整個(gè)函數(shù)定義會(huì)被提升。所以,可以在函數(shù)還未定義之前調(diào)用它,而不用擔(dān)心找不到該函數(shù)。

console.log(toSquare(3));?//?9
function?toSquare(n)?{
????return?n?*?n;
}

變量只會(huì)被部分提升。而且只有變量的聲明會(huì)被提升,賦值不會(huì)動(dòng)。

開發(fā)者可能最希望實(shí)現(xiàn) for循環(huán)的塊級(jí)作用域了,因?yàn)榭梢园央S意聲明的計(jì)數(shù)器變量限制在循環(huán)內(nèi)部。

for?(var?i?=?0;?i?<?10;?i++)?{
????console.log(i);
}

立即執(zhí)行函數(shù)能夠有效解決:

for?(var?i?=?0;?i?<?10;?++i)?{
????(function?(value)?{
????????console.log(value);
????})(i);
}

再來看一個(gè)例子

(function?()?{
????var?testValue?=?"hello";
????var?testFunc?=?function?()?{
????????console.log("just?test");
????};
})();
console.log(window.testValue);?//?undefined
console.log(window.testFunc);?//?undefined

趣題:

var?x?=?10;
var?y?=?20;
[y,?x]?=?[x,?y];
console.log(x,?y);?//?20?10

let 聲明

過早訪問 let聲明的引用導(dǎo)致的這個(gè)referenceerror叫做臨時(shí)死亡區(qū)錯(cuò)誤,在訪問一個(gè)已經(jīng)聲明但還沒有初始化的變量。創(chuàng)建一個(gè)塊作用域。

let?g1?=?"global?1";
let?g2?=?"global?2";
{
????g1?=?"new?global?1";
????let?g2?=?"local?global?2";
????console.log(g1);?//?new?global?1
????console.log(g2);?//?local?global?2
????console.log(g3);?//?ReferenceError:?g3?is?not?defined
????let?g3?=?"I?am?not?hoisted";
}

const 聲明

const是對(duì)賦值做鎖定,不對(duì)值的改變鎖定。例如:數(shù)組、對(duì)象。 一個(gè)常見的誤解是:使用const聲明的變量,其值不可更改,但是對(duì)于數(shù)組和對(duì)象,其值是可以更改的。

const?tryMe?=?"initial?assignment";
//下面重新賦值會(huì)導(dǎo)致程序錯(cuò)誤
tryMe?=?"this?has?been?reassigned";?//?TypeError:?Assignment?to?constant?variable.

//對(duì)于數(shù)組是可以更改元素值
const?array?=?["Ted",?"is",?"awesome!"];
array[0]?=?"Barney";
array[3]?=?"Suit?up!";
console.log(array);?//?[?'Barney',?'is',?'awesome!',?'Suit?up!'?]
//下面這樣更改整個(gè)數(shù)組,相對(duì)于重新賦值,是錯(cuò)誤的
array?=?["Barney",?"is",?"awesome!",?"Suit?up!"];

//?同樣對(duì)于對(duì)象
const?airplane?=?{};
airplane.wings?=?2;
airplane.passengers?=?200;
console.log(airplane);?//?{?wings:?2,?passengers:?200?}

//下面是錯(cuò)誤
airplane?=?{?wings:?2,?passengers:?200?};

對(duì)于支持ES6的語法,建議默認(rèn)使用 const, 在確實(shí)需要改變的變量聲明使用 let, 這樣可以在某種程度上實(shí)現(xiàn)代碼的不可變。從而可以避免很多的問題的出現(xiàn)。

到此這篇關(guān)于javascript 變量聲明 var,let,const 的區(qū)別的文章就介紹到這了,更多相關(guān)JS var,let,const 的區(qū)別內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 微信小程序獲取頭像和昵稱的最新方法(直接用!)

    微信小程序獲取頭像和昵稱的最新方法(直接用!)

    微信小程序最新獲取頭像信息之前是使用open-dada獲取微信頭像和昵稱,但是后面由于官網(wǎng)更新,此方法被收回了,所以不能使用此方法了,下面這篇文章主要給大家介紹了關(guān)于微信小程序獲取頭像和昵稱的最新方法,本文介紹的方法可以直接拿來用,需要的朋友可以參考下
    2023-05-05
  • 詳解JavaScript數(shù)組的操作大全

    詳解JavaScript數(shù)組的操作大全

    這篇文章主要給大家介紹js數(shù)組的操作,數(shù)組的創(chuàng)建,數(shù)組元素的發(fā)那個(gè)吻,數(shù)組元素的添加,數(shù)組元素的刪除,數(shù)組的截取和合并,數(shù)組的拷貝,數(shù)組元素的排序,數(shù)組元素的字符串化等知識(shí),對(duì)js數(shù)組的操作感興趣的朋友可以參考下本篇文章
    2015-10-10
  • js is_valid_filename驗(yàn)證文件名的函數(shù)

    js is_valid_filename驗(yàn)證文件名的函數(shù)

    有時(shí)候我們需要對(duì)文件名進(jìn)行控制,包括一些特殊命名的文件與特殊符號(hào)的文件名進(jìn)程替換,那么就可以使用下面的函數(shù)
    2017-07-07
  • 如何在JavaScript中創(chuàng)建具有多個(gè)空格的字符串?

    如何在JavaScript中創(chuàng)建具有多個(gè)空格的字符串?

    這篇文章主要介紹了如何在JavaScript中創(chuàng)建具有多個(gè)空格的字符串?,需要的朋友可以參考下
    2020-02-02
  • 詳解JavaScript 浮點(diǎn)數(shù)運(yùn)算的精度問題

    詳解JavaScript 浮點(diǎn)數(shù)運(yùn)算的精度問題

    這篇文章主要介紹了詳解JavaScript 浮點(diǎn)數(shù)運(yùn)算的精度問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • JavaScript 獲取事件對(duì)象的注意點(diǎn)

    JavaScript 獲取事件對(duì)象的注意點(diǎn)

    平時(shí)我們獲取事件對(duì)象一定要將firefox考慮進(jìn)去。
    2009-07-07
  • 微信小程序日期時(shí)分組件(年月日時(shí)分)

    微信小程序日期時(shí)分組件(年月日時(shí)分)

    這篇文章主要為大家詳細(xì)介紹了微信小程序日期時(shí)分組件,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • HTML+CSS+JavaScript實(shí)現(xiàn)簡(jiǎn)單日歷效果

    HTML+CSS+JavaScript實(shí)現(xiàn)簡(jiǎn)單日歷效果

    這篇文章主要為大家詳細(xì)介紹了HTML+CSS+JavaScript實(shí)現(xiàn)簡(jiǎn)單日歷效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • JavaScript常用函數(shù)工具集:lao-utils

    JavaScript常用函數(shù)工具集:lao-utils

    現(xiàn)在Javascript庫(kù)海量,流行的也多,比如jQuery,YUI等,雖然功能強(qiáng)大,但也是不萬能的,功能不可能涉及方方面面,這里給大家分享一個(gè)的JS庫(kù)是對(duì)這些的補(bǔ)充,很多也比較實(shí)用,把應(yīng)用到項(xiàng)目中中去也比較方面,這也是對(duì)工作的一些積累,也加深對(duì)知識(shí)的理解。
    2016-03-03
  • JS字符串與二進(jìn)制的相互轉(zhuǎn)化實(shí)例代碼詳解

    JS字符串與二進(jìn)制的相互轉(zhuǎn)化實(shí)例代碼詳解

    這篇文章主要介紹了JS字符串與二進(jìn)制的相互轉(zhuǎn)化 ,在文中給大家提到了Js之字符串和字節(jié)碼之間的相互轉(zhuǎn)換,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-06-06

最新評(píng)論