1. 程式人生 > 其它 >js中定義變數var 與 let的區別

js中定義變數var 與 let的區別

let 與 var 的區別在於作用域不一樣。let被用來做塊作用域,它比函式作用域要小一點。
如果他們兩個都沒有被定義在函式中也沒有定義在塊作用域中,那麼他們就都屬於全域性作用域。

  1. var 和 let 宣告的變數在全域性作用域中被定義時,兩者非常相似
let bar = 'hehe';
var baz = 'lala'; 
  1. 但是,被let宣告的變數不會作為全域性物件window的屬性,而被var宣告的變數卻可以
console.log(window.bar);  //undefined
console.log(window.baz); // 'able'

函式作用域
var 和 let 在函式作用域中宣告一個變數,兩個變數的意義是相同的。

  function  aFun(){
    let bar = 'hehe'; // 函式作用域中的變數
    var baz = 'lala'; // 函式作用域中的變數
}

塊作用域
在塊作用域中兩者的區別較為明顯, let只在for()迴圈中可用,而 var是對於包圍for迴圈的整個函式可用

function  aFun1(){
    // i 對於for迴圈外的範圍是不可見的(i is not defined)
    for(let i = 1; i<5; i++){
        //  i只有在這裡是可見的
    }
    // i 對於for迴圈外的範圍是不可見的(i is not defined)
}
function aFun2(){
    // i 對於for迴圈外的範圍是可見的
    for(var i = 1;i<5; i++){
        // i 在for 在整個函式體內都是可見的
    }
    // i 對於for迴圈外的範圍是可見的
}

let 和var 重新宣告

  • var允許在同一作用域中宣告同名的變數,而let不可以
let me  = 'foo';
let me  = 'bar'; //SyntaxError: Identifier 'me' has already been declared

var me = 'foo';
var me = 'bar'; //這裡me被替代了,是可以重複宣告的
  • es6中還有一個宣告變數的命令const,const和let都是在宣告的塊作用域中有效,但是let宣告的變數可變,值和型別都可以改變,沒有限制。const宣告額變數不能改變,所以,const一旦宣告一個變數,就必須馬上初始化,不能留到以後賦值
const hehe; //報錯,Missing initializer in const declaration

const a = 3;
a = 5; //報錯,Uncaught TypeError: Assignment to constant variable.