在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 教程/ HTML/ 未來(lái)前景
生成器
箭頭函數(shù)
繼續(xù)迭代器
未來(lái)前景
簡(jiǎn)介
非結(jié)構(gòu)化賦值
迭代器和 for-of 循環(huán)
代理
符號(hào)
模版字符串
let 和 const
容器
模塊

未來(lái)前景

這篇文章涵蓋了十多個(gè)我們從未詳細(xì)討論過(guò)的新函數(shù)。我們可以把這當(dāng)作在語(yǔ)言的豪宅中進(jìn)行了一次有趣的游覽,游覽中我們參觀了所有的壁櫥和樓上奇形怪狀的房間。也許有一兩個(gè)超級(jí)大的地下洞穴。如果你還沒(méi)有看過(guò)該系列的其他部分,請(qǐng)看這里;本部分未必是最好的開(kāi)始的地方!

http://wiki.jikexueyuan.com/project/es-six-deeply/images/future.png" alt="alt text" />"在你的左邊,你可以看到類(lèi)型數(shù)組……"

一個(gè)提前警告:許多下述功能還沒(méi)有得到廣泛的實(shí)施。好,讓我們開(kāi)始吧。

你已經(jīng)使用的函數(shù)

ES6 標(biāo)準(zhǔn)化了一些先前使用其他標(biāo)準(zhǔn)或被廣泛使用但并無(wú)標(biāo)準(zhǔn)的函數(shù)。

  • 類(lèi)型數(shù)組,緩沖數(shù)組數(shù)據(jù)視圖。這些都曾被標(biāo)準(zhǔn)化為 WebGL 的一部分,從那以后他們已經(jīng)被應(yīng)用于許多應(yīng)用程序編程接口,包括畫(huà)布、網(wǎng)絡(luò)音頻應(yīng)用程序編程接口和網(wǎng)頁(yè)實(shí)時(shí)通信。當(dāng)你需要處理大量的原始二進(jìn)制或數(shù)字?jǐn)?shù)據(jù)時(shí),使用它們會(huì)非常方便。

例如,如果畫(huà)布渲染上下文對(duì)象而失去了你想要的特征并且你覺(jué)得自己充分掌握了它的核心,你便可以自己將它實(shí)現(xiàn)。

var context = canvas.getContext("2d");
var image = context.getImageData(0, 0, canvas.width, canvas.height);
var pixels = image.data;  // a Uint8ClampedArray object
// ... Your code here!
// ... Hack on the raw bits in `pixels`
// ... and then write them back to the canvas:
context.putImageData(image, 0, 0);

在標(biāo)準(zhǔn)化過(guò)程中,類(lèi)型化數(shù)組重新取用了.slice(),.map().filter()方法。

  • Promises。只寫(xiě)一個(gè)有關(guān) promises 的段落就像一口只吃一片薯片。無(wú)論這有多難,它都是一件幾乎無(wú)意義去做的事情。怎么說(shuō)呢?Promises 就像異步 JS 編程的基石,他們代表了將被使用的值。舉個(gè)例子,當(dāng)你調(diào)用fetch()函數(shù)而不是阻塞模式時(shí),它會(huì)立即返回一個(gè)Promise 對(duì)象。Fetch 將進(jìn)入后臺(tái)工作,當(dāng)反射代碼出現(xiàn)時(shí)它會(huì)叫你回來(lái)。Promises 因鏈接工作的很好而比單獨(dú)使用 callbacks 更勝一籌,他們是擁有著趣味操作的一類(lèi)值,你可以樣板文件更少的情況下?lián)碛绣e(cuò)誤處理權(quán)。他們?cè)鰪?qiáng)了瀏覽器的性能。如果你還不知道關(guān)于 promises 的所有,先去看看杰克·阿奇博爾德的深入探究文章

  • 塊級(jí)作用域函數(shù)。你本不應(yīng)該使用它,但在無(wú)意中你也許已經(jīng)使用過(guò)了。 在 ES1-5 中,這段代碼在技術(shù)上是非法的:

該函數(shù)在 if 塊中聲明被認(rèn)為是非法的。

if (temperature > 100) {
  function chill() {
    return fan.switchOn().then(obtainLemonade);
  }
  chill();
}

他們只在頂層或函數(shù)的最外層塊內(nèi)合法。

但是可以說(shuō),它被用于所有主要瀏覽器。

不兼容。每個(gè)瀏覽器都有一點(diǎn)點(diǎn)不同,但它依然可以工作并且許多網(wǎng)頁(yè)仍然在使用它。

謝天謝地,ES6 標(biāo)準(zhǔn)化了這一點(diǎn)。函數(shù)被提升到了封閉塊的頂部。

不幸的是,F(xiàn)irefox 和 Safari 沒(méi)有執(zhí)行這項(xiàng)標(biāo)準(zhǔn)。所以就目前而言,使用函數(shù)表達(dá)式來(lái)代替。

if (temperature > 100) {
  var chill = function () {    
    return fan.switchOn().then(obtainLemonade);
  };
  chill();
}

塊作用域函數(shù)沒(méi)有在多年前就被標(biāo)準(zhǔn)化的唯一原因是向后兼容的限制極其復(fù)雜。沒(méi)有人認(rèn)為它能被解決。ES6 通過(guò)添加了一項(xiàng)非常奇怪的規(guī)則完成了這項(xiàng)艱巨的任務(wù),這個(gè)規(guī)則就是僅適用于非嚴(yán)格代碼。我無(wú)法解釋它。相信我,使用嚴(yán)格的模式。

  • 函數(shù)名。所有主要 JS 引擎還長(zhǎng)期支持有名函數(shù)的一個(gè)非標(biāo)準(zhǔn).name屬性。ES6 把這標(biāo)準(zhǔn)化,通過(guò)為一些在此之前被認(rèn)為無(wú)名的函數(shù)推斷合理的.name,來(lái)將其變得更好。
> var lessThan = function (a, b) { return a < b; };
> lessThan.name
    "lessThan"

對(duì)于其他函數(shù),如回調(diào)體現(xiàn)為.then的參數(shù),該規(guī)范仍然沒(méi)有制定一個(gè)名字。fn.name 便成了空字符串。

好的事情

早在五月,我們就推出了其余的參數(shù)。他們是函數(shù)的一個(gè)接收任意數(shù)量參數(shù)的方式,是隨機(jī)、復(fù)雜難懂的參數(shù)對(duì)象的更文明的選擇。

function log(...stuff) {  // stuff is the rest parameter.
  var rendered = stuff.map(renderStuff); // It's a real array.
  $("#log").add($(rendered));
}

我們沒(méi)有說(shuō)的是,有傳遞給函數(shù)任意數(shù)量參數(shù)的匹配語(yǔ)法,能夠更文明的替代 fn.apply()

// log all the values from an array
log(...myArray);

當(dāng)然,它與任何可迭代對(duì)象一起工作,這樣你就可以將所有東西記錄在一個(gè)集里并記錄為 log(... mySet)。

與其他參數(shù)不同的是,在單一的參數(shù)列表內(nèi)多次重復(fù)使用展開(kāi)運(yùn)算符是有效的。

// kicks are before trids
log("Kicks:", ...kicks, "Trids:", ...trids);

展開(kāi)運(yùn)算符可以方便地扁平化數(shù)組中的一個(gè)數(shù)列。

> var smallArrays = [[], ["one"], ["two", "twos"]];
> var oneBigArray = [].concat(...smallArrays);
> oneBigArray
    ["one", "two", "twos"]

...但也許這是一個(gè)只有我渴求的迫切需要。如果是這樣,我責(zé)怪哈斯克爾。

  • 構(gòu)造數(shù)組的展開(kāi)運(yùn)算符。同樣追溯回五月,我們談到了解構(gòu)的“休息”模式。它們是從一個(gè)數(shù)列中獲取任意數(shù)量元素的一種方法。
> var [head, ...tail] = [1, 2, 3, 4];
> head
    1
> tail
    [2, 3, 4]

猜猜發(fā)生了什么!竟然有把任意數(shù)量元素添加到一個(gè)數(shù)列中的匹配語(yǔ)法。

> var reunited = [head, ...tail];
> reunited
    [1, 2, 3, 4]

所有函數(shù)調(diào)用的展開(kāi)運(yùn)算符的使用規(guī)則都相同:你可以在同一數(shù)列中多次使用展開(kāi)運(yùn)算符等等。

  • 合適的尾調(diào)用。這對(duì)于我來(lái)說(shuō)太不可思議了,我試著在這里解釋。

要想理解這個(gè)特征,最好從《計(jì)算程序的結(jié)構(gòu)與解讀》第一頁(yè)開(kāi)始了解。如果你喜歡它,就繼續(xù)閱讀下去。尾調(diào)用在1.2.1章節(jié)“線性遞歸與迭代”中得到了闡述。ES6 標(biāo)準(zhǔn)要求實(shí)現(xiàn)“尾遞歸”,這個(gè)名詞在其中就有定義。

到現(xiàn)在為止還沒(méi)有主要 JS 引擎對(duì)其進(jìn)行實(shí)施,因?yàn)檫@比較難以實(shí)現(xiàn)。但是一切都很好。

正文

  • Unicode 版本升級(jí)。ES5 至少需要實(shí)現(xiàn)支持 Unicode 版本 3.0 的所有字符,ES6 至少需要實(shí)現(xiàn)支持 Unicode 版本 5.1.0 的所有字符?,F(xiàn)在你可以使用Linear B中的字符來(lái)作為你的函數(shù)名了!

    Linear A還是有一點(diǎn)冒險(xiǎn)。一是因?yàn)橹钡?Unicode 版本 7.0 它才加入,二是因?yàn)楹茈y保持用從未被破解的語(yǔ)言編寫(xiě)代碼。

(即使在 JavaScript 引擎中支持在 Unicode 6.1 中加入表情符號(hào),你也不能使用

上一篇:let 和 const下一篇:繼續(xù)迭代器