你所不知道的JavaScript(三)

第五章 語法es6

{…}一個代碼塊會返回最後一個語句的結果值,能夠用eval()去得到(不建議),{}在不一樣狀況下意思不一樣,能夠是語句塊、對象常量、解構賦值或者命名函數參數,在代碼塊中有一個坑,{}+[]//0,{}是一個空執行塊(不執行任何操做),最後+[]將[]強制類型轉換爲0。[]+{}//」[object object]」。Switch中的判斷是一個嚴格相等的判斷,這個一不注意就會出錯。
在「&&」和「||」的判斷中,前者的優先級高於後者的優先級,並且a&&b裏,若a爲假值,會返回a的值而不會再往下判斷,而a||b裏,若a爲真值,會返回a的值而不會再往下判斷。編程

第二部分 異步與性能
第一章 異步:如今與將來promise

JS是一門異步單線程語言,這是爲了在用戶交互時不會出現假死狀況,優化用戶體驗。沒有了並行就少了不少繁瑣的狀態,而利用異步編程模擬併發又可讓js效率提升,js有如今執行的函數,也有將來執行的函數。js的異步函數不會立刻執行,而是先註冊監聽,等到事件觸發了,就將這個回調函數壓入事件隊列中,等待順序運行的任務隊列空了之後,再執行事件隊列中的函數。併發

第二章 回調異步

咱們人類的大腦都適應了順序的作每個動做,因此能夠看作相似於單線程運行的事件循環隊列,就像js引擎同樣。因爲異步編程,一不當心js就容易造成回調地獄,並且回調中缺少順序性和可信任性容易形成控制反轉,回調函數是js異步的基本單元,但是隨着業務的發展和推動,複雜度愈來愈高,所以須要一種更同步、更順序、更阻塞的方式來表達異步。異步編程

第三章 Promise函數

Promise提供了一種解決方式去處理如今值和將來值,每次執行promise的返回值都是一個promise對象,這樣就意味着咱們能夠鏈式去調用,它有三種狀態,狀態只能改變一次,以後就不能再改變。Promise有三種狀態決議,完成和拒絕,Promise對象能夠傳入兩個參數resolve和reject,分別會調用兩個函數,決議和拒絕函數。性能

第四章 生成器優化

在es6中提出了生成器generator的概念,這意味着代碼能夠在運行期間被暫停,而後等待命令繼續往下執行,這種交替的暫停和恢復是合做性的而不是搶佔性的。Function *foo(){},這就是一個生成器的聲明,在函數裏若是碰到了yield就會暫停執行,而後咱們能夠用next()去命令它往下運行,其中還能傳參數,參數由對應位置的yield接收,而要啓動生成器,咱們首先得執行一次next()第一個next傳任何參數都會被默認視爲undefined,next()還包含了一個value屬性,儲存的是下一個位置的yield的值。生成器的優勢就在於其內部的代碼以天然的同步(順序)方式表達任務的一系列步驟,爲異步代碼保持了順序、同步、阻塞的代碼模式。線程

相關文章
相關標籤/搜索