JavaScript|var, let, const淺析

1.var命令

  • var聲明的變量,在全局范圍內(nèi)都有效,可以修改;

   var a = 1;
   function change(){
     a = 4;
     console.log(a);//可以輸出a=4
   } 
   change();
  • 聲明時,不初始化會輸出undefined,不會報錯。

  var a; //不會報錯
  console.log(a); //undefined
  • 存在變量提升

    console.log(foo); // 輸出undefined
    var foo = 2;
    

2.let命令

  • let的用法類似于var,但是所聲明的變量,只在let命令所在的代碼塊內(nèi)有效;

    for (let i = 0; i < 10; i++) {}
    console.log(i);
    //ReferenceError: i is not defined
    
  • 使用let命令聲明變量之前,該變量都是不可用的(不存在變量提升);

  console.log(bar); // 報錯ReferenceError
  let bar = 2;
  • let不允許在相同作用域內(nèi),重復(fù)聲明同一個變量。

  // 報錯
  function () {
    let a = 10;
    var a = 1;
  }

  // 報錯
  function () {
    let a = 10;
    let a = 1;
  }

3.const命令

  • const聲明一個只讀的常量。一旦聲明,常量的值就不能改變。

  const PI = 3.1415;
  PI // 3.1415

  PI = 3; // TypeError: Assignment to constant variable
  • const聲明的變量不得改變值,這意味著,const一旦聲明變量,就必須立即初始化,不能留到以后賦值。

  const foo; // SyntaxError: Missing initializer in const declaration
  • const的作用域與let命令相同:只在聲明所在的塊級作用域內(nèi)有效。

  if (true) {
     const MAX = 5;
  }

  MAX // Uncaught ReferenceError: MAX is not defined
  • const命令聲明的常量,與let一樣也不提升,只能在聲明的位置后面使用。

  if (true) {
    console.log(MAX); // ReferenceError
    const MAX = 5;
  }

上面代碼在常量MAX聲明之前就調(diào)用,結(jié)果報錯。

  • const聲明的常量,也與let一樣不可重復(fù)聲明。

  var message = "Hello!";
  let age = 25;

  // 以下兩行都會報錯
  const message = "Goodbye!";
  const age = 30;
  • 對于復(fù)合類型的變量,變量名不指向數(shù)據(jù),而是指向數(shù)據(jù)所在的地址。const命令只是保證變量名指向的地址不變,并不保證該地址的數(shù)據(jù)不變。

  const foo = {};
  foo.prop = 123;

  foo.prop
  // 123

  foo = {}; // TypeError: "foo" is read-only

上面代碼中,常量foo儲存的是一個地址,這個地址指向一個對象。不可變的只是這個地址,即不能把foo指向另一個地址,但對象本身是可變的,所以依然可以為其添加新屬性。

分別在什么情況下使用?
es6里面不建議使用var了,因為var定義的變量沒有塊級作用域,還會出現(xiàn)變量提升的情況,這樣經(jīng)常會導(dǎo)致你意想不到的錯誤;而let就不會這樣,const是定義那些不可以被重新賦值的變量,let是定義普通的變量。

如有錯誤,請指正!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容