js中var contst let之间的区别

1.const 和 let 必须先声明再使用,不支持变量提升
console.log(a,b,c); //报错 ReferenceError: a is not defined
var a=1;
let b=2;
const c=3;
console.log(a,b,c); //输出1 2 3
2.作用域:const,let 支持块级作用域,有效避免变量覆盖,块级作用域,在外层不能直接访问内层变量
var a=1;
let b=2;
const c=3;
if (1!=2) {
var a=11;
let b=22;
const c=33;
console.log(a,b,c); //输出11 22 33
var d=11;
let e=22;
const f=33;
}
console.log(a,b,c); //输出11 2 3,拿不到块中的值
console.log(d); //输出11
console.log(e);//报错Uncaught ReferenceError: e is not defined
console.log(f);//同上
3.初始值:const ,let声明的变量必须设置初始值,且不能重复赋值(同一作用域)。
var a=1;
let b=2;
const c=3;
console.log(a,b,c);
var a=11;
const c=33; //Identifier 'c' has already been declared 报错c已经声明过了
let b=22; //同上
console.log(a,b,c);
4.const 定义常量,该常量不能赋值,但该常量的属性可以赋值
const a = {};
const b = [];
a.name = 'seven';
b.push(27);
b.push(27);
console.log(a, b); //输出{ name: 'seven' } [ 27, 27 ]
5.禁止给对象赋值,应该使用 Object.freeze
const a = Object.freeze({});
const b = Object.freeze([]);
a.name = 'seven'; //不报错
b.push(27); // 报错 Cannot add property 0, object is not extensible
console.log(a,b); //输出{} 报错
6.事务 let var
循环要用let
在for中每一次循环,let 都是重新声明变量,并且因为 JavaScript 引擎会记住上一次循环的值,初始化 i 时在上一轮的基础上计算。
for (var i = 0; i != 3; i++) {
setTimeout(function() {
console.log(i);
},10);
} //输出3 3 3
// 依次打印
for (let i = 0; i != 3; i++) {
setTimeout(function() {
console.log(i);
},10);
} //输出0 1 2

浙公网安备 33010602011771号