var方式
{
var i =
9;
}
console.log(i);
// 9
ES6新增的let,可以声明块级作用域的变量。
{
let i = 9; //i变量只在作用域内有效
}
console.log(i); //Uncaught ReferenceError: i is not defined
var
var
for (var i = 0; i <10; i++) {
setTimeout(function() {
console.log(i);
}, 10);
}
// 输出结果
10 共10个
let
for (let i = 0; i <10; i++) {
setTimeout(function() {
console.log(i);
}, 10);
}
// 输出结果
0 1 2 3 4 5 6 7 8 9
let a = 0;
let a = 'aa';
// Uncaught SyntaxError: Identifier 'a' has already been declared
const 声明一个只读变量,声明之后不允许改变。意味着,一旦声明必须初始化,否则会报错。
基本用法:
const PI = "3.1415926";
PI // 3.1415926
const MY_AGE; // SyntaxError: Missing initializer in const declaration
暂时性死区:
var PI = "a";
if(true){
console.log(PI); // ReferenceError: PI is not defined
const PI = "3.1415926";
}
ES6 明确规定,代码块内如果存在 let 或者 const,代码块会对这些命令声明的变量从块的开始就形成一个封闭作用域。代码块内,在声明变量 PI 之前使用它会报错。