1. 程式人生 > >ES6 var 與let的區別

ES6 var 與let的區別

var宣告及變數提升機制:
在函式作用域或全域性作用域中通過關鍵字var 宣告的變數,無論實際上在哪裡宣告的,都會被當做在當前作用域頂部宣告的變數
let 不會提升變數

// 正常的宣告一個函式
        function getToken(token) {
            //   如果token為true
            if (token) {
                var val = '123456';
                return val;
            } else {
                console.log(val);// 此處訪問為undefind
} } getToken();

var的變數的提升 及JS引擎會把上面的getToken函式修改成下面這樣 val變數被提升至最上面 程式碼如下

 function getToken(token) {
            var val;
            //   如果token為true
            if (token) {
                val = '123456';
                return val;
            } else {
                console.log(val
);// 此處列印為undefind } } getToken();

如果使用let 來宣告 變數將不會提升 打印出來的將會報錯 程式碼如下

 function getToken(token) {
            //   如果token為true
            if (token) {
                let val = '123456';
                return val;
            } else {
                console.log(val);// 此處報錯為Uncaught ReferenceError: val is not defined
} } getToken();

變數將不會提升


還有就是 let 不能重複宣告
比如

  var token=10;
  let token=20;
  // 報錯 Uncaught SyntaxError: Identifier 'token' has already been declared

當然塊級內還是可以的 如下

 // 因為是塊級作用 是沒問題的
        var val = 10
        if (token) {
            let val = 20;
        }

OK var 與let 的區別 就講解與此 謝謝觀看。