JavaScript權威指南筆記

常量和局部變量express

常量能夠當作不可重複賦值的變量(對常量從新賦值會失敗但不報錯),對常量的重複聲明會報錯。數組

const pi=3.14;    //定義一個常量並賦值;
pi = 4;            //任何對這個常量的從新賦值都被忽略;
const pi = 4;        //從新聲明常量會報錯;
var pi = 4            //這裏也會報錯

關鍵字const和關鍵字var的行爲很是相似,因爲JavaScript中沒有塊級做用域,所以常量會被提早至函數定義的頂部。異步

關鍵字let有4種使用方式:函數

能夠做爲變量聲明,和var同樣;
·在for或for/in循環中,做爲var的替代方案;
·在語句塊中定義一個新變量並顯式指定它的做用域;
·定義一個在表達式內部做用域中的變量,這個變量只在表達式內可用。測試


解構賦值prototype

右側的數組和對象中一個或多個的值被提取出來(解構),並賦值給左側相應的變量名。除了用於常規的賦值運算符以外,解構賦值還用於初始化用var和let新聲明的變量。code

迭代對象

1.for/each循環繼承

for/each循環並不單單針對數組自己的元素進行遍歷,它也會遍歷數組中全部可枚舉屬性的值,包括由數組繼承來的可枚舉方法。所以,一般並不推薦for/each循環和數組一塊兒使用。ip

2.迭代器

迭代器是一個對象,這個對象容許對它的值集合進行遍歷,並保持任何須要的狀態以便可以跟蹤到當前遍歷的「位置」。
迭代器必須包含next()方法,每一次調用next()都返回集合中的下一個值

3.生成器

任何使用關鍵字yield的函數(哪怕yield在代碼邏輯中是不可達的)都稱爲「生成器函數」(generator function)。生成器函數經過yield返回值。這些函數中能夠使用return來終止函數的執行而不帶任何返回值,但不能使用return來返回一個值。除了使用yield,對return的使用限制也使生成器函數更明顯地區別於普通函數。然而和普通的函數同樣,生成器函數也經過關鍵字function聲明,typeof運算符返回"function",並能夠從Function.prototype繼承屬性和方法。但對生成器函數的調用卻和普通函數徹底不同,不是執行生成器函數的函數體,而是返回一個生成器對象。
生成器是一個對象,用以表示生成器函數的當前執行狀態。它定義了一個next()方法,後者可恢復生成器函數的執行,直到遇到下一條yield語句爲止。這時,生成器函數中的yield語句的返回值就是生成器的next()方法的返回值。若是生成器函數經過執行return語句或者到達函數體末尾終止,那麼生成器的next()方法將拋出一個StopIteration。
4.數組推導

數組推導包含三個部分:

一個沒有循環體的for/in或for/each循環。這部分推導包括一個變量(或者經過解構賦值獲得的多個變量),它位於關鍵字in的左側,in的右側是一個對象(例如,這個對象能夠是一個生成器、可迭代對象或數組)。儘管這個對象後面沒有循環體,這段數組推導也能正確執行迭代,並能給指定的變量賦值。注意,在變量以前沒有關鍵字var和let,其實這裏使用了隱式的let,在數組推導中的變量在方括號的外部是不可見的,也不會覆蓋已有的同名變量。
·在執行遍歷的對象以後,是圓括號中的關鍵字if和條件表達式,目前,這個條件表達式只是用作過濾迭代的值。每次for循環產生一個值以後會判斷條件表達式。若是條件表達式返回false,則跳過這個值,這個值也不會被添加至數組當中。if從句是可選的,若是省略的話,至關於給數組推導補充一條if(true)從句。
·在關鍵字for以前是expression,能夠認爲這個表達式是循環體。在迭代器返回了一個值並將它賦給一個變量,且這個變量經過了conditional測試以後,將計算這個表達式,並將表達式的計算結果插入到要建立的數組中。
5.生成器表達式

生成器表達式的返回值是一個生成器對象,而不是一個數組。

函數簡寫

若是函數只計算一個表達式並返回它的值,關鍵字return和花括號均可以省略,並將待計算的表達式緊接着放在參數列表以後

多catch語句

在catch從句的參數中加入關鍵字if以及一個條件判斷表達式

12章

用Rhino腳本化Java

用Node實現異步I/O

相關文章
相關標籤/搜索