官术网_书友最值得收藏!

1.1.4 復合函數(shù)

我們已經(jīng)介紹了JavaScript里的一些元素,它們必然也會出現(xiàn)在任何一種強大的程序設計語言里,包括:

●數(shù)和算術運算是基本的數(shù)據(jù)和函數(shù)。

●組合式的嵌套提供了一種把多個操作組織起來的方法。

●常量聲明是一種受限的抽象手段,其功能就是為名字關聯(lián)值。

現(xiàn)在我們來學習函數(shù)聲明,這是一種威力更強大的抽象技術,通過它可以給復合操作確定一個名字,而后就可以把它作為一個單元來引用。

我們從如何表述“平方”的概念開始。我們可能說“求某個東西的平方,就是用它自身去乘它自身”。在我們的語言里,這件事應該表述為:

可以按如下方式理解這一描述:

這樣我們就有了一個復合函數(shù),它還被命名為square。這個函數(shù)表示把一個東西乘以其自身的操作。被乘的東西給定了一個局部名x,它扮演著與自然語言里的代詞同樣的角色。求值這一聲明的結(jié)果就是創(chuàng)建出一個復合函數(shù),并把它關聯(lián)于名字square[6]

最簡單的函數(shù)聲明的形式是:

其中的name是一個名字,函數(shù)的定義將在環(huán)境中關聯(lián)于這個名字[7]parameters(形式參數(shù))是一些名字,它們被用在函數(shù)體里,表示要求引用在應用這個函數(shù)時提供的各個實參。這些parameters寫在一對括號里,用逗號分隔,就像所聲明的函數(shù)被實際調(diào)用時的寫法。在最簡單的形式里,這里的body就是一個返回語句,由關鍵字return和一個返回表達式構(gòu)成[8]。在函數(shù)應用時,聲明中的形式參數(shù)被與之對應的實參取代,返回表達式的執(zhí)行生成函數(shù)應用的值。與常量聲明和表達式語句一樣,返回語句最后也需要有分號。

聲明了square之后,我們就可以在函數(shù)應用表達式里使用它。我們可以給這種表達式加上分號,將其轉(zhuǎn)變?yōu)橐粋€語句:

除了運算符組合式,函數(shù)應用是我們遇到的第二種組合表達式,它們同樣可用于構(gòu)造更大的表達式。函數(shù)應用的一般形式是:

應用中的function-expression(函數(shù)表達式)描述希望應用的函數(shù),要求將其應用于逗號分隔的那些argument-expression(實參表達式)。在求值一個函數(shù)應用式時,解釋器將按下面的過程工作,類似于1.1.3節(jié)描述的運算符組合式的求值過程:

需要求值一個函數(shù)應用式時,按下面的方式工作:

1.求值應用式中的各個子表達式,即其中的函數(shù)表達式和各個實參表達式。

2.把得到的函數(shù)(也就是函數(shù)表達式的值)應用于那些實參表達式的值。

這里的實參表達式本身又是組合式,即為運算符組合式2+5。

很自然,實參表達式同樣也可以是函數(shù)應用表達式。

我們還可以用square作為基本構(gòu)件去聲明其他函數(shù)。舉例說,x2+y2可以描述為:

現(xiàn)在我們很容易聲明一個函數(shù)sum_of_squares[9],給它兩個數(shù)作為實參,它就能給出這兩個數(shù)的平方和:

現(xiàn)在我們又可以用sum_of_squares作為構(gòu)件,進一步去構(gòu)造其他函數(shù)了:

除了復合函數(shù)之外,每個JavaScript環(huán)境都提供了一些基本函數(shù),它們被構(gòu)筑在解釋器里,或者可以從函數(shù)庫裝入。除了為各個運算符提供相應的基本函數(shù),本書使用的JavaScript環(huán)境還包括了另外一些基本函數(shù),例如函數(shù)math_log,它計算實參的自然對數(shù)值[10]。基本函數(shù)的使用方式與復合函數(shù)一樣,math_log(1)將得到數(shù)值0。實際上,如果只看上面給出的sum_of_squares的聲明,我們根本沒辦法分辨其中的square究竟是直接構(gòu)筑在解釋器里,或是從程序庫裝入,還是通過聲明定義的復合函數(shù)。

主站蜘蛛池模板: 贵定县| 济宁市| 庆安县| 连平县| 平安县| 泗洪县| 平山县| 原平市| 民丰县| 巩留县| 清流县| 兴业县| 化德县| 聂拉木县| 阳新县| 延吉市| 元谋县| 朔州市| 巴林右旗| 和顺县| 米易县| 乐昌市| 龙川县| 乌审旗| 荣成市| 广西| 崇信县| 陆川县| 青田县| 嵩明县| 昌黎县| 东安县| 抚远县| 红安县| 博客| 麻阳| 泊头市| 威海市| 台江县| 黄大仙区| 泰宁县|