1. 程式人生 > >var let 和 const 的區別 異同

var let 和 const 的區別 異同

異同之處

1:var 和 let 和 const ,前兩者宣告的是變數,可更改值,後者不可,

2:var 和 let 和 const ,後兩者宣告的變數和常量具有塊級作用域,而前者只具有函式作用域

分別解析示例:

1:var

var 是在ES5之前就有的關鍵字,目的是用來宣告變數,但是ES5之前對作用域的劃分比較簡單,叫函式作用域。

根據命名就可以看出來,var 宣告的變數的作用域作用在其對應函式中,而函式的標誌就是 function

例如:
function aaa(){
    var a = 0;
    for(var i = 0; i < 5; i++){
        console.log(a)  //  0  // a 是定義在 aaa 函式中的變數,在函式中任意位置可以直接訪問
        console.log(i)  //  0,1,2,3,4,
    }
    console.log(a)  //  0  // a 是定義在 aaa 函式中的變數,在函式中任意位置可以直接訪問
    console.log(i)  //  4  
// 雖然i是在for迴圈程式碼塊中定義的,但是ES5之前並沒有將塊作用域單列出來,而是執行的函式作用域,
// 此時還在函式中,所以變數 i 是可以訪問的
}

// 在函式外部,已經脫離了變數的所在函式作用域,所以就會報錯
console.log(a)  //  Uncaught SyntaxError: Unexpected identifier
console.log(i)  //  Uncaught SyntaxError: Unexpected identifier

2:let

let 是 ES6 新增的關鍵詞,目的也是來宣告變數,但是ES6 隨之增加的一個作用域叫塊級作用域,當然函式作用域也繼續延用,

let宣告的變數是在塊級作用域中使用,塊級之外的地方則不可訪問,

例如:
function aaa(){
    var a = 0;
    for(let i = 0; i < 5; i++){
        console.log(a)  //  0  // a 是定義在 aaa 函式中的變數,在函式中任意位置可以直接訪問
        console.log(i)  //  0,1,2,3,4,
    }
    console.log(a)  //  0  // a 是定義在 aaa 函式中的變數,在函式中任意位置可以直接訪問
    console.log(i)  // Uncaught SyntaxError: Unexpected identifier
// 因為 i 是在for迴圈程式碼塊中定義的,此處已經脫離了宣告他的塊級作用域,所以不能訪問
}

// 在函式外部,已經脫離了變數的所在函式作用域,所以就會報錯
console.log(a)  //  Uncaught SyntaxError: Unexpected identifier
console.log(i)  //  Uncaught SyntaxError: Unexpected identifier

 3:const 

const 也是 ES6 新增的關鍵詞,目的是來宣告常量,const 和 let 一樣具有塊級作用域,常量的定義是不可更改的

例如:
function aaa(){
    let a = 0;
    for(let i = 0; i < 5; i++){
        console.log(a)  // 0 // a 是定義在 aaa 函式中的變數,也可以說是定義在函式aaa的程式碼塊中間,所以在函式中任意位置可以直接訪問
        console.log(i)  //  0,1,2,3,4,
    }
    console.log(a)  // 0 // a 是定義在 aaa 函式中的變數,也可以說是定義在函式aaa的程式碼塊中間,所以在函式中任意位置可以直接訪問
    console.log(i)  // Uncaught SyntaxError: Unexpected token ;
// 因為 i 是在for迴圈程式碼塊中定義的,所以在塊級作用域之外是不可訪問的

}

// 在函式外部,已經脫離了變數的所在函式作用域,那麼在函式中的塊級作用域中定義的變數自然就不能訪問了,
console.log(a)  //  Uncaught SyntaxError: Unexpected identifier
console.log(i)  //  Uncaught SyntaxError: Unexpected identifier

總結:

異同之處

1:var 和 let 和 const ,前兩者宣告的是變數,可更改值,後者不可,

2:var 和 let 和 const ,後兩者宣告的變數和常量具有塊級作用域,而前者只具有函式作用域

解析:

let 和 var都可以定義的變數,但是 var 定義的變數作用在宣告他的函式作用域中,而 let 定義的變數只能在宣告他的程式碼塊中訪問,也就是let 定義的變數只作用在宣告他的塊級作用域中

let 和 const 都是ES6新增的關鍵詞,都具有塊級作用域,但let宣告的是變數,可隨意更改他的值,const宣告的是常量,不可更改值