不少人都很困惑,哪怕是工做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循環使用,也不會出現變量提高現象。同一個代碼塊內,不可重複聲明的相同變量,不可重複聲明函數內的參數。