js中let和var定義變量的區別

javascript 嚴格模式

第一次接觸let關鍵字,有一個要非常非常要注意的概念就是”javascript 嚴格模式”,比如下述的代碼運行就會報錯:

let hello = 'hello world.';
console.log(hello);

錯誤信息如下:

let hello = 'hello world.';
^^^

SyntaxError: Block-scoped declarations (let, const, function, class) not yet supported outside strict mode
    ...

解決方法就是,在文件頭添加”javascript 嚴格模式”聲明:

'use strict';

let hello = 'hello world.';
console.log(hello);

更多更詳細的關於”javascript 嚴格模式”說明,請參考阮一峯的博客
《Javascript 嚴格模式詳解》

let和var關鍵字的異同

聲明後未賦值,表現相同

'use strict';

(function() {
  var varTest;
  let letTest;
  console.log(varTest); //輸出undefined
  console.log(letTest); //輸出undefined
}());

使用未聲明的變量,表現不同:

(function() {
  console.log(varTest); //輸出undefined(注意要註釋掉下面一行才能運行)
  console.log(letTest); //直接報錯:ReferenceError: letTest is not defined

  var varTest = 'test var OK.';
  let letTest = 'test let OK.';
}());

重複聲明同一個變量時,表現不同:

'use strict';

(function() {
  var varTest = 'test var OK.';
  let letTest = 'test let OK.';

  var varTest = 'varTest changed.';
  let letTest = 'letTest changed.'; //直接報錯:SyntaxError: Identifier 'letTest' has already been declared

  console.log(varTest); //輸出varTest changed.(注意要註釋掉上面letTest變量的重複聲明才能運行)
  console.log(letTest);
}());

變量作用範圍,表現不同

'use strict';

(function() {
  var varTest = 'test var OK.';
  let letTest = 'test let OK.';

  {
    var varTest = 'varTest changed.';
    let letTest = 'letTest changed.';
  }

  console.log(varTest); //輸出"varTest changed.",內部"{}"中聲明的varTest變量覆蓋外部的letTest聲明
  console.log(letTest); //輸出"test let OK.",內部"{}"中聲明的letTest和外部的letTest不是同一個變量
}());
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章