2016-08-18 102 views
0

許多JS社區已經完全接受了在ES6中編寫的習慣,並使用編譯器(如Babel)輸出更多的瀏覽器友好的ES5。ES6編寫和ES5編譯如何使最終用戶受益?

我的問題是,如果在瀏覽器中運行的是獨佔的或絕大多數的ES5,那麼用戶受益於所有額外的JS? Babel添加的額外代碼使編譯的app.js更加沉重,性能可能更低。

所以我想我的問題是 - 這一切有什麼意義?

你會注意到我的問題做了一些假設。隨時糾正那些:)

+2

這就像問你「爲什麼你會使用Java,當你可以使用C」?這是因爲語法糖。你得到更少的錯誤程序,並且你可以更快地開發。 – 4castle

+0

@ 4castle我懷疑這可能是這種情況,這就是爲什麼我提出我的問題,專門解決最終用戶(而不是作者)如何/如果從中受益的問題。 – nomis101uk

+4

它不會以任何方式使用戶受益。轉譯器爲您提供的任何功能,您都可以爲您的用戶自行實施。譯者會在那裏爲開發者帶來好處。 您可以編寫更簡潔,表達性更強的代碼,更易於閱讀和維護。 –

回答

-1

一個好處是,你可以寫在ES6中非常清晰,簡潔的代碼,將在ES5中需要很多行。舉個例子:

ES6:

const PI = 3.141593 
PI > 3.0 

ES5:

Object.defineProperty(typeof global === "object" ? global : window, "PI", { 
    value:  3.141593, 
    enumerable: true, 
    writable:  false, 
    configurable: false 
}) 
PI > 3.0; 

正如你可以看到,他們都做到了同樣的事情,但不同的是在一個巨大的儲蓄時間和更乾淨的代碼。你更願意編碼/維護哪個?這種做法幾乎只針對開發者,而不是最終用戶。

貸:http://es6-features.org/#Constants

+0

另外,您想編寫高效且易讀的代碼,其中es6和es7的規格大大提高。因此,儘管沒有太多js引擎可以「讀取」這些規範,但他們總有一天會完成,而且您不需要更新代碼 –

+2

「const」變量不會成爲全局屬性。 – Oriol

+1

巴貝爾在轉換中做了什麼?我認爲如果它看到一個重新分配,它會替換'var'並對你大叫。 – 4castle

0

有很多的,幫助抵消使用transpiler的成本效益。對我來說最大的問題是你的代碼可以有更少的錯誤。

幫助你的代碼更穩定的ES6功能的一個例子是let。在ES5和之前,使用var創建變量一直困擾着錯誤,由於變量提升。 Var Hoisting是代碼執行的地方,與你寫的不同。這通常不是問題,但可以是,尤其是對於if語句內的for循環和變量。但是,現在使用let,我們得到了實際的塊範圍變量。這意味着這些類型的錯誤消失了,因爲let作用域對當前塊作用域是可變的。它非常強大,可悲的是,這花了很長時間纔得到JS。另一個例子是arrow functions。雖然所有JS開發人員都知道匿名函數是什麼,但箭頭函數幾乎完全相同,但有兩個主要區別。首先,箭頭函數沒有原型,這意味着它們在內存中的佔用空間更小。第二個是this通過箭頭函數綁定到外部作用域,其中匿名函數將失去所有外部作用域的值以及外部作用域this的概念。使用匿名函數,最終會產生大量的錯誤,導致您在this上引用變量,但未定義this。所以爲了解決這個問題,人們最終做了一些愚蠢的事情,比如var me = this;,然後他們在匿名函數回調中引用me。具有箭頭功能將使您的代碼減少錯誤並更易於維護。因此,由於諸如letarrow functions以及其他許多因素,您在ES6中編寫的代碼更有可能比ES5代碼在語義上更正確,這應該會導致更穩定的代碼。

也許我最喜歡的功能是類。使用類構建豐富模型要比使用較低版本的ES5更容易。