ES6 let和const定义变量与常量的应用实例分析
本文实例讲述了ES6let和const定义变量与常量的应用。分享给大家供大家参考,具体如下:
关于let
- let是小作用域的变量的声明
{ vara=12; letb=15; { console.log(a);//12 console.log(b);//15 } }
- let是块级作用域,不会被提升;var是函数级的变量,存在变量提升,外部可访问
console.log(a);//UncaughtReferenceError:aisnotdefined,直接报错 leta=12;//let定义的变量不能进行变量的提升
console.log(b);//undefined varb=12; //上面的过程存在变量提升过程如下: /* varb; console.log(b); b=12; */
- {}块级作用域,子集可访问,外部不可访问
{ vara=12; letb=15; console.log(b);//15 } console.log(a);//12 console.log(b);//UncaughtReferenceError:bisnotdefined
- let在for循环中有效,var在for循环外仍有效
for(vari=0;i<5;i++){} console.log(i);//5 for(letm=0;m<5;m++){} console.log(m);//UncaughtReferenceError:misnotdefined
- 变量在外部定义后,在内部输出,然后再次使用let关键词声明,那么之前输出会【失效】报错
vara=18; varb=10; fun(); functionfun(){ console.log(b);//10 console.log(a);//UncaughtReferenceError:aisnotdefined leta; }
- 使用let声明的变量唯一,不能重复声明
leta; vara;//UncaughtSyntaxError:Identifier'a'hasalreadybeendeclared
- {}块级作用域等效于立即执行函数
varconfig=(function(){ varres=[]; res.push(1); res.push(2); res.push(3); returnres; })(); console.log(config);//[1,2,3]
letconfig; { config=[]; config.push(1); config.push(2); config.push(3); } console.log(config);//[1,2,3]
- 严格模式下的函数不会被提升
'usestrict'; functiona(){console.log(1);} (function(){ a();//去除'usestrict'之后报错:aisnotafunction,加上'usestrict'之后正常,输出1 if(false){ functiona(){console.log(2);}//此处重新声明和赋值了一个a函数,上面输出1的时候表示没有被提升 } })();
- 使用var在for循环中定义的变量保持最后一个值的状态
vararr=[]; for(vari=0;i<5;i++){ arr.push(function(){ console.log(i); }) } arr[1]();//5
- 使用var在for循环中定义的变量可使用自执行函数和闭包维持变量的状态
vararr=[]; for(vari=0;i<5;i++){ arr.push((function(i){ returnfunction(){ console.log(i); } })(i)); } arr[1]();//1
- 使用let在for循环中定义的变量可自动维持变量的状态
vararr=[]; for(leti=0;i<5;i++){ arr.push(function(){ console.log(i); }) } arr[1]();//1
关于const
- 所有属性同let
- 使用const定义的是常量不可被修改,而指针对象的地址不可被修改,其属性可以被修改
consta={ name:'J' }; a.name='Z'; a.age=10; console.log(a);//{name:"Z",age:10} a={};//尝试修改引用的地址 console.log(a);//UncaughtTypeError:Assignmenttoconstantvariable.
- 使用Object的freeze进行冻结对象,严格模式下会报错,非严格模式下无法修改
consta={ name:'K' } a.age=13; console.log(a);//{name:"K",age:13} Object.freeze(a); a.age=14; console.log(a);//UncaughtTypeError:Cannotassigntoreadonlyproperty'age'ofobject'#
更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。