溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JavaScript es6中var、let以及const三者的區(qū)別

發(fā)布時(shí)間:2021-08-30 20:36:12 來(lái)源:億速云 閱讀:259 作者:chen 欄目:開(kāi)發(fā)技術(shù)

這篇文章主要講解了“JavaScript es6中var、let以及const三者的區(qū)別”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“JavaScript es6中var、let以及const三者的區(qū)別”吧!

首先,一個(gè)常見(jiàn)的問(wèn)題是,ECMAScript 和 JavaScript 到底是什么關(guān)系?

        ECMAScript是一個(gè)國(guó)際通過(guò)的標(biāo)準(zhǔn)化腳本語(yǔ)言。JavaScript由ECMAScript和DOM、BOM三者組成。可以簡(jiǎn)單理解為:ECMAScript是JavaScript的語(yǔ)言規(guī)范,JavaScript是ECMAScript的實(shí)現(xiàn)和擴(kuò)展。

        2011 年,ECMAScript 5.1 版發(fā)布。之前我們大部分人用的也就是ES5

        2015 年 6 月,ECMAScript 6 正式通過(guò),成為國(guó)際標(biāo)準(zhǔn)。

1. 塊級(jí)作用域 {}

        ES5 中作用域有:全局作用域、函數(shù)作用域。沒(méi)有塊作用域的概念。

        ES6 中新增了塊級(jí)作用域。塊作用域由 { } 包括,if語(yǔ)句和 for語(yǔ)句里面的{ }也屬于塊作用域。

<script type="text/javascript">
	
    {
        var a = 1;
        console.log(a); // 1
    }
    console.log(a); // 1
    // 通過(guò)var定義的變量可以跨塊作用域訪問(wèn)到。
 
    (function A() {
        var b = 2;
        console.log(b); // 2
    })();
    // console.log(b); // 報(bào)錯(cuò),
    // 可見(jiàn),通過(guò)var定義的變量不能跨函數(shù)作用域訪問(wèn)到
 
    if(true) {
        var c = 3;
    }
    console.log(c); // 3
    for(var i = 0; i < 4; i ++) {
        var d = 5;
    };
    console.log(i); // 4   (循環(huán)結(jié)束i已經(jīng)是4,所以此處i為4)
    console.log(d); // 5
    // if語(yǔ)句和for語(yǔ)句中用var定義的變量可以在外面訪問(wèn)到,
    // 可見(jiàn),if語(yǔ)句和for語(yǔ)句屬于塊作用域,不屬于函數(shù)作用域。
 
</script>

2. var、let、const的區(qū)別

var定義的變量,沒(méi)有塊的概念,可以跨塊訪問(wèn), 不能跨函數(shù)訪問(wèn)。let定義的變量,只能在塊作用域里訪問(wèn),不能跨塊訪問(wèn),也不能跨函數(shù)訪問(wèn)。const用來(lái)定義常量,使用時(shí)必須初始化(即必須賦值),只能在塊作用域里訪問(wèn),而且不能修改。

<script type="text/javascript">
    // 塊作用域
    {
        var a = 1;
        let b = 2;
        const c = 3;
        // c = 4; // 報(bào)錯(cuò)
        var aa;
        let bb;
        // const cc; // 報(bào)錯(cuò)
        console.log(a); // 1
        console.log(b); // 2
        console.log(c); // 3
        console.log(aa); // undefined
        console.log(bb); // undefined
    }
    console.log(a); // 1
    // console.log(b); // 報(bào)錯(cuò)
    // console.log(c); // 報(bào)錯(cuò)
 
    // 函數(shù)作用域
    (function A() {
        var d = 5;
        let e = 6;
        const f = 7;
        console.log(d); // 5
        console.log(e); // 6  
        console.log(f); // 7 
 
    })();
    // console.log(d); // 報(bào)錯(cuò)
    // console.log(e); // 報(bào)錯(cuò)
    // console.log(f); // 報(bào)錯(cuò)
</script>

3. const定義的對(duì)象屬性是否可以改變

這是今天面試的時(shí)候碰到的一個(gè)問(wèn)題,上面說(shuō)到 const 是不能修改的,于是很痛快的說(shuō)不能,但是回來(lái)實(shí)際測(cè)試后發(fā)現(xiàn)錯(cuò)了,在此記錄一下。

 const person = {
     name : 'jiuke',
     sex : '男'
 }
 
 person.name = 'test'
 
 console.log(person.name)

運(yùn)行上述代碼,發(fā)現(xiàn)person對(duì)象的name屬性確實(shí)被修改了,這是怎么回事呢?

因?yàn)閷?duì)象是引用類(lèi)型的,person中保存的僅是對(duì)象的指針,這就意味著,const僅保證指針不發(fā)生改變,修改對(duì)象的屬性不會(huì)改變對(duì)象的指針,所以是被允許的。也就是說(shuō)const定義的引用類(lèi)型只要指針不發(fā)生改變,其他的不論如何改變都是允許的。

然后我們?cè)囍薷囊幌轮羔槪宲erson指向一個(gè)新對(duì)象,果然報(bào)錯(cuò)

const person = {
   name : 'jiuke',
   sex : '男'
}
 
person = {
   name : 'test',
   sex : '男'
}

感謝各位的閱讀,以上就是“JavaScript es6中var、let以及const三者的區(qū)別”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)JavaScript es6中var、let以及const三者的區(qū)別這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI