声明一个变量let的作用和var类似,但是去掉了很多varBlockscope{vara='123';}{letb='456'}//如果执行在浏览器环境控制台。log(a);//'123'console.log(b);//b未定义不会绑定全局变量,防止全局变量污染vara='123';letb='456';//直接结果console.log(window.a);//'123'console.log(window.b);//undefined;同一个作用域内不允许重复声明同一个变量leta='123';leta='456';//执行结果console.log(a);//抛出语法错误:SyntaxError:Identifier'me'已经被声明为经典示例for(vari=1;i<10;i++){}console.log(i);//输出10,不小心污染了全局环境//使用let,不会有这个问题for(letj=1;j<10;j++){}console.日志(j);//抛出一个引用异常:ReferenceError:jisnotdefinedDeclareconstantconst在es6之前,没有很好的声明常量的方法。常量:这是一个只读变量,在es6中给出了const的特性,专门用来处理此类问题consta='123';一='456';//抛出异常SyntaxError:"a"isread-only注意常量对象的属性是可以改变的constobj={name:'hello'}obj.name='hello2';//这个地方是合法的for...of这个es6提供了一个新的迭代器,功能和for...in类似,但是前者返回值,后者返回下标letdata=['a','公元前'];for(letiindata){console.log(i);//输出0,1,2}for(letjofdata){console.log(j);//Outputa,b,c}ProxyProxies这是es6提供的一个强大的特性,可以非侵入式修改对象的默认行为方式varobj={name:'dog'};varhandler={get:function(target,key){返回目标[key].replace('dog','cat');}};//设置代理varproxy=newProxy(obj,handler);console.log(proxy.name);有许多属性可以被代理:varhandler={get:...,set:...,has:...,deleteProperty:...,apply:...,construct:...,getOwnPropertyDescriptor:...,defineProperty:...,getPrototypeOf:...,setPrototypeOf:...,enumerate:...,ownKeys:...,preventExtensions:...,isExtensible:...}
