标签:全局 cti 存储 ati 常量 ref 函数 mis 声明变量
let,const是es6种新增的关键字;
let的特点:
{ let a=1; console.log(a);//1 } console.log(a);//Uncaught ReferenceError: a is not defined,报错不会继续往下执行 let a=2; console.log(a);
let a=2; console.log(a);//2 { let a=1; console.log(a);//1 } console.log(a);//2
var的特点:
{ var a=1; console.log(a);//1 } console.log(a);//1 var a=2; console.log(a);//2
const的特点:
const PI=3.1415926; console.log(PI)//3.1415926 console.log(‘==================‘) const PI2; console.log(PI2)//Uncaught SyntaxError: Missing initializer in const declaration //一旦声明必须初始化,否则报错 const obj={a:1}; obj.a=2; console.log(obj)//{a:2} //此时obj是个对象,obj存储的是对象的地址,地址没有改变,所以此时不会报错 obj=function(){ return 2; } console.log(obj)//报错 //把一个对象重新赋值给了obj,此时改变了对象的指针指向
let 和const都有封闭性死区的特性:
let a=123;//代码块外定义了一个变量a if(true){ console.log(a);//报错Uncaught ReferenceError: a is not defined let a=111;//代码块内定义了一个变量a, console.log(a);//111 }
var A=1; if(A>0){ console.log(A);//A is not defined; const A=666; }
es6明确规定:代码内如果存在let或者const,代码块会对这些命令声明的变量会从代码块的开始就形成一个封闭的作用域。代码块内,在声明变量a/A之前使用它就会报错。
备注:从{开始,到}结束,代码形成一个封闭的区域,不管代码块外边是否用let/const对当前变量进行了定义,代码块中的变量都不受影响。因为不在同一个作用域下,如果是同一个作用域,变量是不能重复声明的。
标签:全局 cti 存储 ati 常量 ref 函数 mis 声明变量
原文地址:https://www.cnblogs.com/fanfanZhao/p/12179752.html