js中var contst let之间的区别

js中var contst let之间的区别

img

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 支持块级作用域,有效避免变量覆盖,块级作用域,在外层不能直接访问内层变量

(在块外面访问不到块内的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

 

posted @ 2020-08-08 18:29  ㊀觉睡到小时候  阅读(234)  评论(0)    收藏  举报