这两个命令声明的都是块作用域变量和常量
let 变量
function test(){
for(var i=0;i<3;i++){
console.log('innner:' + i)
}
console.log('last:' + i) // 3
}
es5没有块作用域,所以此处i的作用域为test的函数作用域。
function test(){
for(let i=0;i<3;i++){
console.log('innner:' + i)
}
console.log('last:' + i) // Uncaught ReferenceError: i is not defined
}
es6新增了块作用域,所以此处i的作用域为for循环后面的大括号内。
function test(){ // Duplicate declaration "a"
let a = 2;
let a = 1;
}
let a = 3;
同一作用域内,let不能重复定义同名变量。
const 常量
function test(){
const PI; // Unexpected token
PI = 3.14;
console.log(PI)
}
常量声明时必须赋值
function test(){
const PI= 3.14;
PI = 8; // SyntaxError: "PI" is read-only
console.log(PI);
}
常量不能被重新赋值
function test(){
let a = 1;
const PI= a;
a = 4;
console.log(PI); // 1
}
function test(){
let a = {
b:1
};
const PI= a;
a.b = 4;
console.log(PI) // {b: 4}
}
const被赋值为值类型和引用类型的区别






网友评论