var let 和 const 的區別 異同
阿新 • • 發佈:2018-11-09
異同之處
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宣告的是常量,不可更改值