一、历史问题
ESMAScript 的名称
1、JavaScript的制定者公司是Netscape,该公司为了让JavaScript能够成为一个中标准化的语言, 就将JavaScript交由ESMS来管理,其实ECMA是一个组织, 就是标准化组织。所以后面说的ECMA标准就是在这制定的。但是之所以不叫 JavaScript,有两个原因。一是商标,Java 是 Sun 公司的商标,根据授权协议,只有 Netscape 公司可以合法地使用 JavaScript 这个名字,且 JavaScript 本身也已经被 Netscape 公司注册为商标。二是想体现这门语言的制定者是 ECMA,不是 Netscape,这样有利于保证这门语言的开放性和中立性。
2、那么ECMA2015又是什么呢?其实是ECMA约定了每年都要退出一个新的标准,并且以年号命名,恰好因为ECMA2015这个标准是ECAMScript的第六个版本的第一个标准,也就是ES6的第一个版本,所以就被大家重视了,并且也搞的很混淆。所以说ES6其实包含了ECMA2015、ECMA2016、ECMA2017这样的版本。随着时间的推移,支持度已经越来越高了,超过 90%的 ES6 语法特性都实现了。并且大多数的现代浏览器都已经支持ES6了,但是有个问题, 就是大家往往都不愿意讨论的IE这个奇葩, 在早些年代里IE可是浏览器里的霸主了, 微软也真是成也萧何败萧何,话说微软不是声称1年半一个新的系统吗,咋没消息了,有点跑题了,嘻嘻。
Node
以后要是有时间在写, 理解的太浅了。
ES6的块级作用域
我们都知道,在ES5中顶级作用域是全局作用域,而顶层对象对应的应该是window, 子集作用域实际上也是函数级作用域,使用var定义的变量在这相应的作用域内不会消失,也就是var定义的变量在出了块而没出函数的时候是不会被回收掉的, 然而这样也就出现了这样的问题, 在变量在相应的块中使用完成后, 而是在相应的作用域内成了一个遗留的变量, 这在我一个java开发者的角度来看,起码是不可思议的。ES6中意识到了这个问题,讲作用域限制在了块级,这也就像java一样了, 在相应的块中程序结束后,变量也随即消失,同时内存回收。 并且ES6中使用let定义变量,也推荐非常量和函数及类级别的变量使用let定义。let变量使用需要提前定义,这与大多数的类c语言一致,而在ES5中却不会这样使用。