<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                ## 3\. JavaScript 的歷史和演變 > 原文: [http://exploringjs.com/impatient-js/ch_history.html](http://exploringjs.com/impatient-js/ch_history.html) ### 3.1 JavaScript 是如何誕生的 JavaScript 由 Brendan Eich 于 1995 年 5 月創建,工期 10 天。 Eich 在 Netscape 工作并為它的網絡瀏覽器 _Netscape Navigator_ 實現了 JavaScript。 當時,人們認為 Web 客戶端的主要交互部分將用 Java 實現。 JavaScript 應該是這些部分的粘合語言,并且可以使 HTML 更具交互性。鑒于它在協助 Java 方面的作用,JavaScript 必須看起來像 Java。這排除了現有的解決方案,如 Perl,Python,TCL 等。 最初,JavaScript 的名稱改變了數次: * 它的代號是 _Mocha_ 。 * 在 Netscape Navigator 2.0 測試版(1995 年 9 月)中,它被稱為 _LiveScript_ 。 * 在 Netscape Navigator 2.0 beta 3(1995 年 12 月)中,它的最終名稱為 _JavaScript_ 。 ### 3.2 標準化 JavaScript 有兩個標準: * ECMA-262 由 Ecma International 主持。這是主要標準。 * ISO / IEC 16262 由國際標準化組織(ISO)和國際電工委員會(IEC)主持。這是次要標準。 這些標準描述的語言稱為 _ECMAScript_ ,而不是 _JavaScript_ 。使用不同的名稱,是因為 Sun(現在的 Oracle)擁有“Java”的商標。“ECMAScript”中的“ECMA”來自主持主要標準的組織。 該組織的原始名稱是 _ECMA_ ,_歐洲計算機制造商協會_ 的首字母縮寫。后來它改名成了 _Ecma International_ (“Ecma”是一個專有名稱,而不是縮寫),因為該組織的活動已經擴展到歐洲以外。ECMAScript 的拼寫仍然使用全大寫的縮寫。 原則上,JavaScript 和 ECMAScript 是同一個東西。但有時,會做出以下區分: * 術語 _JavaScript_ 指的是語言及其實現。 * 術語 _ECMAScript_ 是指語言標準和語言版本。 因此, _ECMAScript 6_ 是該語言的一個版本(其第 6 版)。 ### 3.3 ECMAScript 版本的時間表 這是 ECMAScript 版本的簡要時間表: * ECMAScript 1(1997 年 6 月):該標準的第一版。 * ECMAScript 2(1998 年 6 月):小更新,使 ECMA-262 與 ISO 標準保持同步。 * ECMAScript 3(1999 年 12 月):添加了許多核心功能——“[...]正則表達式,更好的字符串處理,新的控制語句[do-while,switch],try / catch 異常處理,[...]” * ECMAScript 4(2008 年 7 月放棄):本來是一次大規模的升級(使用靜態類型,模塊,命名空間等),但最終變得過于激進并且導致了陣營分歧。因此,它被放棄了。 * ECMAScript 5(2009 年 12 月):帶來了一些小改進——一些標準庫功能和 [_嚴格模式_](ch_syntax.html#strict-mode) 。 * ECMAScript 5.1(2011 年 6 月):另一項保持 Ecma 和 ISO 標準同步的小更新。 * ECMAScript 6(2015 年 6 月):一個大型更新,履行了 ECMAScript 4 的許多承諾。這個版本的正式名稱是 _ECMAScript 2015_,它是首個基于發布年份的名稱。 * ECMAScript 2016(2016 年 6 月):第一次年度發布。與 ES6 的全面更新相比,較短的發布生命周期導致新功能較少。 * ECMAScript 2017(2017 年 6 月)。第二次年度發布。 * 隨后的 ECMAScript 版本(ES2018 等)始終會在 6 月份獲得批準。 ### 3.4 Ecma 技術委員會 39(TC39) TC39 是發展 JavaScript 的委員會。嚴格來說,它的成員都是公司:Adobe,Apple,Facebook,Google,Microsoft,Mozilla,Opera,Twitter 等。這些公司通常是激烈的競爭對手,但它們正在為語言的利益而共同努力。 每兩個月,成員任命的代表和受邀專家會參加 TC39 會議。這些會議的記錄是公開的,可以在 [GitHub 倉庫](https://github.com/tc39/tc39-notes/)中看到。 ### 3.5 TC39 流程 通過 ECMAScript 6,我們可以看到當時的發布過程存在兩個明顯的問題: * 如果在版本之間隔了太長時間,那么早期準備好的功能必須等待很長時間才能發布,并且沒有準備好的功能可能會趕不上死線。 * 功能通常在實現和使用之前很久就已設計好。因此,當發現與實現和使用相關的設計缺陷時,通常為時已晚。 針對這些問題,TC39 制定了新的 _TC39 流程_: * ECMAScript 功能是分別獨立設計的,而且會經歷 5 個階段,從 0 開始(“Strawman”),結束于 4(“Finished”)。 * 后期的幾個階段需要原型實現和實際測試,從而獲得設計和實現之間的有效交互。 * ECMAScript 版本每年發布一次,將會包括在發布截止日期之前已達到第 4 階段的所有功能。 因此,我們可以獲得:每個版本變動較小,帶有經過實際測試的特性。圖 [1](#fig:tc39-process-stages) 說明了 TC39 過程。 ![圖 1:每個 ECMAScript 特性的提案會經過從 0 到 4 依次編號的 5 個階段。_Champions_ 是指支持某個特性提案的 TC39 成員。 Test 262 是一套測試,用于檢測 JavaScript 引擎是否正確實現了語言標準。](https://img.kancloud.cn/84/b9/84b9c4c39a4a5ae8b710d8335ce5e76f.svg) 圖 1:每個 ECMAScript 特性的提案會經過從 0 到 4 依次編號的 5 個階段。_Champions_ 是指支持某個特性提案的 TC39 成員。 Test 262 是一套測試,用于檢測 JavaScript 引擎是否正確實現了語言標準。 ES2016 是第一個根據 TC39 流程設計的 ECMAScript 版本。 有關 TC39 過程的更多信息,請參閱[“探索 ES2018 和 ES2019”](es2018-es2019/ch_tc39-process.html)。 #### 3.5.1 提示:讓你的思路適應獨立的功能和階段,而不是一整個 ECMAScript 版本 在 ES6 之前,最常見的想法是根據 ECMAScript 版本來考慮 JavaScript。例如:“這個瀏覽器是否支持 ES6?” 從 ES2016 開始,最好開始考慮單個功能:一旦功能到達第 4 階段,你就可以安全地使用它(只要它被你所使用的 JavaScript 引擎所支持),而不必等到下一個 ECMAScript 版本發布。 ### 3.6 常見問題:關于 TC39 流程 #### 3.6.1 [填入你最喜歡的功能]進展怎么樣? 如果您想了解每個特性草案處于什么階段,請參考 [GitHub 倉庫 `tc39/proposals`](https://github.com/tc39/proposals) 。 #### 3.6.2 是否有正式的 ECMAScript 特性列表? 是的,TC39 的倉庫里列出了[已經完成的提案](https://github.com/tc39/proposals/blob/master/finished-proposals.md),并提到了它們在哪個 ECMAScript 版本被引入。 ### 3.7 JavaScript 進化哲學:不要破壞(特性)網絡 經常出現的一個想法是通過刪除舊功能和各種坑來清理 JavaScript。雖然這個想法很有吸引力,但它也有明顯的缺點。 假設我們創建了一個不向后兼容的 JavaScript 新版本并修復了它的所有缺陷。結果,我們遇到了以下問題: * JavaScript 引擎變得臃腫:它們需要支持舊版本和新版本。對于諸如 IDE 和構建工具之類的工具也是如此。 * 程序員需要知道并不斷注意版本之間的差異。 * 你要么將所有現有代碼庫遷移到新版本(這可能需要大量工作),要么混合兩種版本,讓重構變得更難——因為你無法在不改代碼的情況下在版本之間共用代碼。 * 你不得不指定每段代碼是用什么版本編寫的,無論是嵌入在網頁中的代碼還是單獨的文件。每個可想到的解決方案都有利有弊。例如, [_嚴格模式_](ch_syntax.html#strict-mode) 是 ES5 的稍微改進的版本。它之所以不那么流行的原因之一是:在文件或函數的開頭通過加入指令來啟用功能是一件麻煩事。 那么解決方案是什么?我們能達到我們的目標嗎?ES6 選擇的方法稱為“One JavaScript”: * 新版本總是完全向后兼容(但偶爾可能會有輕微的,幾乎不可察覺的清理)。 * 舊功能不會被刪除或修復。相反,會有一個更好的功能作為替代。一個例子是通過 `let` 聲明變量——這是 `var` 的改進版本。 * 如果語言本身的某些方面發生了變化,那么這個變化只會在某個新的語法環境里應用。也就是說,你不需要做任何特定的聲明。例如,`yield` 只是生成器內部的關鍵字(它在 ES6 中被引入);而模塊和類中的所有代碼(它們都在 ES6 中引入)隱式地處于嚴格模式。 有關 One JavaScript 的更多信息,請參閱[“探索 ES6”](es6/ch_one-javascript.html)。 ![](https://img.kancloud.cn/ff/a8/ffa8e16628cad59b09c786b836722faa.svg) **測驗** 參見[測驗應用程序](ch_quizzes-exercises.html#quizzes)。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看