ECMAScript 6新增常量和让命令,用来声明变量。
声明方式 变量提升 作用域 初始值 重复定义 常量 否 块级 需要 不允许 让 否 块级 不需要 不允许 var 是 函数级 不需要 允许
<强>变量提升:强>常量和让必须先声明再使用,不支持变量提升
控制台。日志(c1, l1, v1);//报错//未捕获ReferenceError: c1没有定义 const c1=癱1”; 让l1=發1”; var v1=皏1”;
<强>作用域:强> const,让支持块级作用域,有效避免变量覆盖
const c21=癱21”; 让l21=發21”; var v21=皏21”; 如果(0.1 + 0.2 !=0.3){ const c21=癱22”; 让l21=跋贰? var v21=皏22”; 控制台。日志(c21 l21 v21);//输出c22戏v22 } 控制台。日志(c21 l21 v21);//输出c21 l21 v22
块级作用域,在外层不能直接访问内层变量
如果(0.1 + 0.2 !=0.3){ const c22=癱22”; 让戏=跋贰? var v22=皏22”; 控制台。日志(c22戏,v22);//输出c22戏v22 } 控制台。日志(c22戏,v22);//报错//未捕获ReferenceError:没有定义//同样地,戏没有定义
const定义常量,该常量不能赋值,但该常量的属性可以赋值
const c231={}; const c232=[]; c231.name=' 7 '; c232.push (27); 控制台。日志(c231 c232);//输出{名称:“七”}[27]//禁止给对象赋值,应该使用Object.freeze const c233=Object.freeze ({}); const c234=Object.freeze ([]); c233.name=' 7 ';//普通模式下不报的错//严格模式下报的错//未捕获TypeError:不能添加属性名,对象不是可扩展 c234.push (27);//普通模式下就会报的错//未捕获TypeError:无法添加属性0,对象不是可扩展的 控制台。日志(c233 c234);//输出{}[]
全局变量不再设置为顶层对象(窗口)的属性,有效避免全局变量污染
const c24=癱24”; 让l24=發24”; 控制台。日志(c24 l24);//输出c24 l24 console.log(窗口。c24 window.l24);//输出未定义定义的
符合预期的循环
(var=0;我!=3;我+ +){ setTimeout(函数(){ console.log(我); },10); }//依次打印 (让我=0;我!=3;我+ +){ setTimeout(函数(){ console.log(我); },10); }//依次打印,为啥呢
可以看到在为循环中使用让方式声明变量才是符合预期。
在为中每一次循环,让都是重新声明变量,并且因为JavaScript引擎会记住上一次循环的值,初始化我时在上一轮的基础上计算。
可以看到在为循环中至少有两层作用域,看下面的例子更容易理解。
(让我=0;我!=3;我+ +){ 让我=' 7 '; console.log(我); } console.log (8);//依次打印 七个 七个 七个 8
<强>初始值:强> const声明的变量必须设置初始值,且不能重复赋值。
const c3=癱3”; 让l3=發3”; var v3=皏3”; 控制台。日志(c3, l3, v3);//输出c3 l3 v3 c3=2;//未捕获TypeError:分配常数变量 l3=2; v3=2; 控制台。日志(c3, l3, v3);//输出c3 2 2 const c32;//报错//未捕获SyntaxError:失踪的初始化在常量声明
重复定义:常量和让不支持重复定义
const,让缩小了变量作用域,完美避免变量污染;const固定变量(即固定变量类型),对于弱类型JavaScript来说,可以明显提升性能。推荐在应用中使用常量,让声明变量。
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。