var、let、const詳細區別

首先,一個常見的問題是,ECMAScript 和 JavaScript 到底是什麼關係?

  ECMAScript是一個國際通過的標準化腳本語言。JavaScript由ECMAScript和DOM、BOM三者組成。可以簡單理解爲:ECMAScript是JavaScript的語言規範,JavaScript是ECMAScript的實現和擴展。

這三個確實倒是有點可以說的東西,他們自身的一些特性,跟相互的區別,直接上文字吧:

var :
1、定義的變量,沒有塊的概念,可以跨塊訪問, 不能跨函數訪問;
2、存在變量提升;
3、可以重複定義;
小知識點:用var定義的不能用delete刪除,不用var的可以用delete刪除,configurable:false(不可刪除)(關於數據屬性的問題:https://blog.csdn.net/weixin_42561383/article/details/90085731)

let :
1、塊級作用域;
2、沒有變量提升(暫時性死區);
3、不能重複定義;

const :
1、塊級作用域;
2、沒有變量提升(暫時性死區);
3、不能重複定義;
4、定義常量;
知識點:定義的基本類型不可不變,但是
const聲明常量保存的是對象的地址,不可變的是地址,而修改對象的屬性,並不會改變對象的地址,因此用const聲明對象的屬性是可以修改的

解釋一下var的第一條
1、定義的變量,沒有塊的概念,可以跨塊訪問, 不能跨函數訪問;

function doSomething () {
    for (var i = 0; i < 5; i++) {
        console.log(i)
    }
    console.log('Finally ' + i)
}

doSomething()
0  1   2   3   4   Finally 5
function doSomething () {
    for (let i = 0; i < 5; i++) {
        console.log(i)
    }
    console.log('Finally ' + i)
}

doSomething()

0   1   2   3   4
/Users/dkvirus/Documents/study/study-typescript/ex1/var.js:5
    console.log('Finally ' + i)
ReferenceError: i is not defined

let 和 const 定義變量的作用域都是 離變量最近的那個塊 內;
var 定義變量的作用域是 離變量最近的那個方法 內

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章