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