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; } }