let
- let 语句声明一个块级作用域
let x = 1;
if (x === 1) {
let x = 2;
console.log(x);
// expected output: 2
}
console.log(x);
// expected output: 1
- let 作用于for 循环 (不建议定义相同的i,不方便阅读)
for(let i = 0 ; i < 3; i++ ){
for(let i = 0 ; i < 3; i++ ){
console.log(i) //这里一共执行了九次
}
}
var
- var声明的是全局成员,存在 "变量提升" 问题
- 变量提升: 由于变量声明(以及其他声明)总是在任意代码执行之前处理的,所以在代码中的任意位置声明变量总是等效于在代码开头声明。
var x = 1;
if (x === 1) {
var x = 2;
console.log(x);
// expected output: 2
}
console.log(x);
// expected output: 2
- var 作用于for 循环 (不建议定义相同的i,不方便阅读)
for(var i = 0 ; i < 3; i++ ){
for(var i = 0 ; i < 3; i++ ){
console.log(i) //这里一共执行了三次 因为内层声明的i覆盖了外层声明的i
}
console.log("内层结束i="+i) //3
//内层结束后 i=3; 外层的 i这时也等于3不满足循环条件所以不执行
}
const
- const声明创建一个只读的值。
const name = 'Kobe';
name = 'James';
//报错 Uncaught TypeError: Assignment to constant variable.
小结
不用 var, 主用用 const, 对于修改的值 配合 let 使用.