最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

無(wú)廢話JavaScript教程(全集)第3/4頁(yè)

 更新時(shí)間:2008年10月07日 23:28:35   作者:  
許多讀者認(rèn)為我那本《JavaScript語(yǔ)言精髓與編程實(shí)踐》讀來(lái)辛苦,所以我一直想寫(xiě)個(gè)簡(jiǎn)單的讀本。索性,這次就寫(xiě)個(gè)最簡(jiǎn)單的吧。

五、函數(shù)式
這個(gè)可不是JavaScript的發(fā)明,它的發(fā)明人已經(jīng)死了,而他的這個(gè)發(fā)明還在困擾著我們……如同愛(ài)迪生的燈
泡還在照耀著我們。
其實(shí)函數(shù)式語(yǔ)言很簡(jiǎn)單,它就是一種與命令式語(yǔ)言同樣“完備”的語(yǔ)言實(shí)現(xiàn)方案。由于它的基礎(chǔ)思想與命令
式——如果你不想用這個(gè)難于理解的名詞,那就把它換成C,或者Delphi好了——語(yǔ)言完全不同,所以大多數(shù)
情況下,它也與這些傳統(tǒng)的、通用的、商業(yè)化的語(yǔ)言格格不入。
而事實(shí)上,你天天都在用它。
下面這行代碼,就充滿了函數(shù)式語(yǔ)言的思想:
a + b
是嗎?真的,如果你把那個(gè)“+”號(hào)看成一個(gè)函數(shù),就完全一樣了。事實(shí)上,所謂函數(shù)(function),就是一個(gè)
執(zhí)行過(guò)程、一段運(yùn)算、一個(gè)功能入口……也就是說(shuō),代碼中的某個(gè)東西,要么它是數(shù)據(jù),要么它是運(yùn)算。而如
果它是運(yùn)算,你就可以把它看成“函數(shù)”。上面這行代碼——表達(dá)式中,a和b顯然是數(shù)據(jù),而+號(hào)則是對(duì)之進(jìn)
行操作的運(yùn)算,所以它自然可以看成一個(gè)“功能、過(guò)程或運(yùn)算”。所以……操作兩個(gè)數(shù)求和的“函數(shù)”可以寫(xiě)
成這樣:
func_add(a, b)
或者這樣:
(+ a b)
所有這些,只是文字上的標(biāo)記法不同而已。就好象我說(shuō)這個(gè)符號(hào)是“jia”,而你非得說(shuō)它是“暗得”,另一個(gè)
人卻非要讀作“a-d-d”。有什么不同嗎?沒(méi)有。
所有程序員天天都在寫(xiě)語(yǔ)句,寫(xiě)表達(dá)式,與運(yùn)算邏輯。大家都知道這些東西都可以寫(xiě)在一個(gè)……嗯……無(wú)比巨
大的函數(shù)里,或者分在無(wú)數(shù)個(gè)小的、看起來(lái)很漂亮的函數(shù)里。當(dāng)所有這些函數(shù)一個(gè)又一個(gè)連續(xù)起來(lái)運(yùn)算時(shí),它
就成了“函數(shù)式語(yǔ)言”。所以稱為“函數(shù)式語(yǔ)言的祖老爺爺”的LISP就是這樣“把函數(shù)運(yùn)算連起來(lái)”的語(yǔ)言:
復(fù)制代碼 代碼如下:

(defun subst (x y z)
(cond ((atom z)
(cond ((eq z y) x)
('t z)))
('t (cons (subst x y (car z))
(subst x y (cdr z))))))

有人認(rèn)為它是丑陋的意大利面條,也有人認(rèn)為它是最簡(jiǎn)潔的語(yǔ)言。Oh,隨你,了解了就好了,管它象什么尼。
由于函數(shù)式語(yǔ)言只有連續(xù)執(zhí)行的函數(shù)——所以它沒(méi)有了“語(yǔ)句”而又必須實(shí)現(xiàn)邏輯上的完整性。簡(jiǎn)單地說(shuō),他
需要在連續(xù)執(zhí)行的過(guò)程中實(shí)現(xiàn)“順序、分支與循環(huán)”三個(gè)基本邏輯。函數(shù)式的解決之道,是用三元條件運(yùn)算來(lái)
代替if/then/else,也就下面的代碼:
if a then b else c
// 相當(dāng)于
a ? b : c
另外,就是用遞歸(函數(shù)調(diào)函數(shù))來(lái)實(shí)現(xiàn)循環(huán)。考慮到遞歸函數(shù)調(diào)用中會(huì)導(dǎo)致棧溢出(Stack overflow at ...),
所以函數(shù)式語(yǔ)言就提出了“尾遞歸”,也就是在書(shū)寫(xiě)代碼是“確?!眱H只在函數(shù)內(nèi)的最后一個(gè)運(yùn)算中遞歸調(diào)用。
這樣一來(lái),這個(gè)遞歸調(diào)用就不需要保留棧了——因?yàn)樵贈(zèng)]有后續(xù)運(yùn)算了,因此就能被優(yōu)化成一行不需要返回的
jmp匯編指令。
世界真美好,所謂函數(shù)式不過(guò)是一堆運(yùn)算入口,以及jmp、jmp、jmp。但,但是,難道不是嗎——這塊CPU?
六、更高級(jí)的函數(shù)式(1)
其實(shí)世界并不美好。
如果一塊CPU死躺在那里,它也就只有順序呀、分支啦、循環(huán)之類的指令在里頭。但是當(dāng)它運(yùn)行起來(lái),就得有一
個(gè)時(shí)鐘在滴嗒…滴嗒…如果是多核的,還會(huì)同時(shí)有好幾個(gè)這樣的東東在滴嗒著。
這就是問(wèn)題,世界原本不是單一時(shí)序,也不是守序的。所以會(huì)有并發(fā),會(huì)有中斷,也會(huì)有異常。函數(shù)式語(yǔ)言應(yīng)
該自己應(yīng)該像意大利面條一樣無(wú)限延展開(kāi)去,那么是不是有多個(gè)滴嗒時(shí)就該有多根意大利面條呢?但,這種情
況下還叫意大利面條嗎?
函數(shù)式里的解決方案叫延續(xù)(Continuation)和結(jié)點(diǎn)。延續(xù)是停止當(dāng)前轉(zhuǎn)到另一處、然后再返回來(lái);而結(jié)點(diǎn)則確
保一個(gè)位置上的代碼是獨(dú)立完備的,與另一個(gè)結(jié)點(diǎn)無(wú)關(guān)。在函數(shù)式語(yǔ)言中,多個(gè)結(jié)點(diǎn)就象平行宇宙,大多數(shù)情
況下它們是互相透明的,如果它們要發(fā)生聯(lián)系,得需要極其巨大的能量,以及……一個(gè)蟲(chóng)洞。
多個(gè)結(jié)點(diǎn)的問(wèn)題我們不需要深究,多個(gè)空間下的訪問(wèn)帶來(lái)的時(shí)空問(wèn)題,是天體學(xué)家以及時(shí)空多維理論家們研究
的問(wèn)題,我們只需要知道:如果你希望多個(gè)結(jié)點(diǎn)之間存在交叉的訪問(wèn)關(guān)系,那么世界/宇宙會(huì)因此毀滅。這樣類
似的說(shuō)明寫(xiě)在ErLang這類天生支持多個(gè)宇宙的語(yǔ)言的白皮書(shū)、參考手冊(cè)以及宇航員日常指南之中。如果你要窮
究其根源,并且認(rèn)為自己已經(jīng)能明確了解300個(gè)以上的高等數(shù)字、物理學(xué)和天體學(xué)術(shù)語(yǔ),地么下面有一份面向程
序員的入口指引,不妨從這里開(kāi)始:

相關(guān)文章

  • JavaScript計(jì)算出現(xiàn)精度丟失問(wèn)題的解決方法

    JavaScript計(jì)算出現(xiàn)精度丟失問(wèn)題的解決方法

    Javascript作為一門大型編程語(yǔ)言,在日常開(kāi)發(fā)中難免會(huì)涉及到大量的數(shù)學(xué)計(jì)算,然而,浮點(diǎn)數(shù)在計(jì)算過(guò)程中可能出現(xiàn)精度的問(wèn)題,下面我們就來(lái)學(xué)習(xí)一下Javascript中高精度計(jì)算及其相關(guān)知識(shí)吧
    2023-11-11
  • 將input框中輸入內(nèi)容顯示在相應(yīng)的div中【三種方法可選】

    將input框中輸入內(nèi)容顯示在相應(yīng)的div中【三種方法可選】

    本篇文章主要介紹了在input框中輸入內(nèi)容,會(huì)相應(yīng)的顯示在下面的div中的不同做法:js方法;jQuery方法;AngularJs方法,具有很好的參考價(jià)值。下面跟著小編一起來(lái)看下吧
    2017-05-05
  • JavaScript中boolean類型之三種情景實(shí)例代碼

    JavaScript中boolean類型之三種情景實(shí)例代碼

    下面小編就為大家?guī)?lái)一篇JavaScript中boolean類型之三種情景實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-11-11
  • 精彩的Bootstrap案例分享 重點(diǎn)在注釋!(選項(xiàng)卡、柵格布局)

    精彩的Bootstrap案例分享 重點(diǎn)在注釋!(選項(xiàng)卡、柵格布局)

    這篇文章主要為大家分享了一個(gè)精彩的Bootstrap案例,涉及到了選項(xiàng)卡、柵格布局,關(guān)鍵重點(diǎn)在注釋,感興趣的小伙伴們可以參考一下
    2016-07-07
  • js中的document.querySelector()方法舉例詳解

    js中的document.querySelector()方法舉例詳解

    這篇文章主要給大家介紹了關(guān)于js中document.querySelector()方法的相關(guān)資料,document.querySelector是JavaScript中的一個(gè)內(nèi)置方法,用于通過(guò)CSS選擇器選擇文檔中的第一個(gè)匹配元素,需要的朋友可以參考下
    2024-01-01
  • JS中call和apply函數(shù)用法實(shí)例分析

    JS中call和apply函數(shù)用法實(shí)例分析

    這篇文章主要介紹了JS中call和apply函數(shù)用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了call和apply函數(shù)繼承功能的使用方法、區(qū)別及操作注意事項(xiàng),需要的朋友可以參考下
    2018-06-06
  • 微信小程序獲取用戶openid的實(shí)現(xiàn)

    微信小程序獲取用戶openid的實(shí)現(xiàn)

    這篇文章主要介紹了微信小程序獲取用戶openid的實(shí)現(xiàn),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • 小程序?qū)崿F(xiàn)可拖動(dòng)的懸浮按鈕

    小程序?qū)崿F(xiàn)可拖動(dòng)的懸浮按鈕

    這篇文章主要為大家詳細(xì)介紹了小程序?qū)崿F(xiàn)可拖動(dòng)的懸浮按鈕,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-09-09
  • javascript數(shù)組的定義及操作實(shí)例

    javascript數(shù)組的定義及操作實(shí)例

    在文章里小編給大家整理的是關(guān)于javascript數(shù)組的定義及操作的相關(guān)知識(shí)點(diǎn),需要的朋友們學(xué)習(xí)下。
    2019-11-11
  • 微信小程序?qū)崿F(xiàn)底部彈窗

    微信小程序?qū)崿F(xiàn)底部彈窗

    這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)底部彈窗,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07

最新評(píng)論

六安市| 桦南县| 鄂尔多斯市| 麻江县| 万载县| 偏关县| 介休市| 怀仁县| 社会| 牙克石市| 辉县市| 北碚区| 武宁县| 许昌市| 姜堰市| 博客| 同德县| 宝兴县| 陆川县| 开封市| 六安市| 乌审旗| 横山县| 电白县| 沁水县| 赤水市| 龙江县| 永昌县| 鄂州市| 石柱| 阳信县| 高阳县| 城口县| 陈巴尔虎旗| 房产| 治县。| 青河县| 建阳市| 子洲县| 吉林省| 衡阳市|