let 和 var 的區別

let ES6 新增命令, 用於聲明變量, 做用域只限於其代碼塊內, 而 var 則能用於整個代碼塊( function)內.javascript

  • 做用域 let 僅在其代碼塊內有效 var 全局或整個代碼塊 ( function )
function letTest() {
  let x = 1;
  if (true) {
    let x = 2;  // 不一樣的變量
    console.log(x);  // 2
  }
  console.log(x);  // 1
}

function varTest() {
  var x = 1;
  if (true) {
    var x = 2;  // 一樣的變量!
    console.log(x);  // 2
  }
  console.log(x);  // 2
}
var a = 5;
var b = 10;

if (a === 5) {
  let a = 4; // 做用於 if 代碼塊
  var b = 1; // 做用於 function 

  console.log(a);  // 4
  console.log(b);  // 1
} 

console.log(a); // 5
console.log(b); // 1
  • let 定義的 i 只有效於 for 循環體
for (let i = 0; i < 10; i++) {
  console.log(i); // 0, 1, 2, 3, 4 ... 9
}

console.log(i); // i 沒有定義
  • let 定義的變量 i 只做用於塊級的代碼塊
var a = [];
for (let i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 6
  • var 定義變量 i 能做用於全局範圍, 因此 console.log(i) 中的 i 指向的是每次循環自增的變量 i
var a = [];
for (var i = 0; i < 10; i++) {
  a[i] = function () {
    console.log(i);
  };
}
a[6](); // 10
  • let 不容許在相同做用域內,重複聲明同一個變量
// 報錯
function func() {
  let a = 10;
  var a = 1;
}

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

// 報錯
function func(arg) {
  let arg;
}

// 不報錯
function func(arg) {
  {
    let arg; 
  }
}
相關文章
相關標籤/搜索