不少人都很困惑,哪怕是工做3至5年前端工程师也困惑,ECMAScript是什么?它跟JavaScript有什么关系?前端
题目:JavaScript由3部分组成,分别是:ECMAScript,BOM和(?)。
从题目中咱们就能够看出来了,ECMAScript是JavaScript的组成部分。程序员
ECMAScript就是JavaScript中的语法规范!ECMAScript是属于国际标准化的语言,全部浏览器开发商都要按照它制定的标准来开发浏览器。开发者也同样,按照它的规定来编程代码。 编程
了解了ECMAScript以后,那什么是ES6呢?数组
ES6是ECMAScript 6的缩写简称,这个好理解。顾名思义,它是ECMAScript的第6个版本,也就是说它有更早的版本,之后还会有更多版本。
1996 年 11 月,Netscape 公司,决定将 JavaScript 提交给国际标准化组织 ECMA。次年,ECMA发布 ECMAScript。这个版本就是 ECMAScript 1.0 版。浏览器
1998 年 6 月,ECMAScript 2.0 版发布。前端工程师
1999 年 12 月,ECMAScript3.0 版发布,成为 JavaScript 的通行标准,获得了普遍支持。ide
2007 年10 月,ECMAScript4.0 版草案发布,对 3.0 版作了大幅升级,可是,以 Yahoo、Microsoft、Google为首的大公司,反对 JavaScript 的大幅升级,主张小幅改动,各方分歧太大,争论过于激进,ECMA 开会决定,停止 ECMAScript 4.0 的开发函数
2009 年 12 月,ECMAScript5.0 版正式发布。code
ES6 给开发者带来不少使人激动的特性,其中let关键字就是其中之一。对象
var arr = [ ]; for(var i=0; i<10; i++){ arr [i] = function(){ alert(i) } } arr [8](); //结果:10
var arr = [ ]; for(let i=0; i<10; i++){ arr[i] = function(){ alert(i) } } arr[8](); //结果:8
那么,什么是块级做用域,怎么才算一个块级做用域?
任何一对花括号(这玩意:{ })中的语句都属于一个块,在花括号里面用let定义的全部变量在花括号外都是不可见的,咱们称之为块级做用域。
代码中,for循环含有有{ },也就是含有了块级做用域,每一个变量 i 都只是在本身的做用域起做用,例如:第10次循环中的 i 的值不会影响到到第9次循环。
var a = 1; function show(){ alert(a); var a = 2; } show();//结果:undefined
var a = 1; function show(){ var a; alert(a); var a = 2; } show();//结果:undefined
var a = 1; function show(){ alert(a); let a = 2; } show();// 结果:报错a is not defined
用let关键字来定义a;这样a在代码块内就不会提高了。
那为何又报错了呢,由于用let声明的变量,在其块级做用域内是封闭的,是不会受到外面的全局变量a影响的,而且要先声明再使用,因此a的值即不是1(由于不受外面的影响),也不是undefined(由于先声明后使用),更不是2,未声明定义就使用,报错。
{ var a =1; let a =2; //报错,由于a已经用var声明过 } { let a =1; let a= 2; //仍是报错,a已经用let声明过。 }
function say(word){ let word = 'hello Jack'; //报错:用let从新声明word参数 alert(word) } say('hello Lili');
用let声明变量只在块级做用域起做用,适合在for循环使用,也不会出现变量提高现象。同一个代码块内,不可重复声明的相同变量,不可重复声明函数内的参数。