摘要:遞歸閉包模仿塊級作用域私有變量小結(jié)在編程中,使用函數(shù)表達(dá)式可以無需對函數(shù)命名,從而實(shí)現(xiàn)動態(tài)編程。匿名函數(shù)也稱為拉姆達(dá)函數(shù)。函數(shù)聲明要求有名字,但函數(shù)表達(dá)式不需要。中的函數(shù)表達(dá)式和閉包都是極其有用的特性,利用它們可以實(shí)現(xiàn)很多功能。
1、遞歸 2、閉包 3、模仿塊級作用域 4、私有變量 5、小結(jié)
在JavaScript編程中,使用函數(shù)表達(dá)式可以無需對函數(shù)命名,從而實(shí)現(xiàn)動態(tài)編程。匿名函數(shù)也稱為拉姆達(dá)函數(shù)。
1、函數(shù)表達(dá)式的特點(diǎn):
(1)函數(shù)表達(dá)式不同于函數(shù)聲明。函數(shù)聲明要求有名字,但函數(shù)表達(dá)式不需要。沒有名字的函數(shù)表達(dá)式也叫做匿名函數(shù);
(2)在無法確定如何引用函數(shù)的情況下,遞歸函數(shù)就會變得比較復(fù)雜;
(3)遞歸函數(shù)應(yīng)該是中應(yīng)用arguements.callee來遞歸地調(diào)用自身,不要使用函數(shù)名,因?yàn)楹瘮?shù)名可能會發(fā)生變化;
2、當(dāng)在函數(shù)內(nèi)部定義了其他函數(shù)時,就創(chuàng)建了閉包。閉包有權(quán)訪問包含函數(shù)內(nèi)部的所有變量,原理如下:
(1)在后臺執(zhí)行環(huán)境中,閉包的作用域鏈包含著它自己的作用域、包含函數(shù)的作用域和全局作用域;
(2)通常,函數(shù)的作用域及其所有變量都會在函數(shù)執(zhí)行結(jié)束后被銷毀;
(3)但是,當(dāng)函數(shù)返回一個閉包時,這個函數(shù)的作用域?qū)恢痹趦?nèi)存中保存到閉包不存在為止;
3、使用閉包可以在JavaScript中模仿塊級作用域(JavaScript本身沒有塊級作用域的概念)
(1)創(chuàng)建并立即調(diào)用一個函數(shù),這樣既可以執(zhí)行其中的代碼,又不會再內(nèi)存中留下對該函數(shù)的引用;
(2)結(jié)果就是函數(shù)內(nèi)部的所有變量都會被立即銷毀——除非將某些變量賦值給了包含作用域(即外部作用域)中的變量;
4、閉包還可以用于在對象中創(chuàng)建私有變量,相關(guān)概念和要點(diǎn)如下:
(1)即使JavaScript中沒有正式的死有對象屬性的概念,但可以使用閉包來實(shí)現(xiàn)公有方法,而通過公有方法可以訪問在包含作用域中定義的變量;
(2)有權(quán)訪問私有變量的公有方法叫做特權(quán)方法;
(3)可以使用構(gòu)造函數(shù)模式、原型模式來實(shí)現(xiàn)自定義類型的特權(quán)方法,也可以使用模塊模式、增強(qiáng)的模塊模式來實(shí)現(xiàn)單例的特權(quán)方法。
JavaScript中的函數(shù)表達(dá)式和閉包都是極其有用的特性,利用它們可以實(shí)現(xiàn)很多功能。不過因?yàn)閯?chuàng)建閉包必須維護(hù)額外的作用域,所以過度使用它們可能會占用大量內(nèi)存。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/109085.html
摘要:字符串大小寫轉(zhuǎn)換方法和則是針對特定地區(qū)的實(shí)現(xiàn)。可以基于指定的分隔符將一個字符串分割成多個子字符串,并將結(jié)果放在一個數(shù)組中將字符串轉(zhuǎn)換為數(shù)組。分隔符可以是字符串,也可以是一個對象。 1、對象創(chuàng)建 String類型是字符串的對象包裝類型,可以像下面這樣使用String構(gòu)造函數(shù)來創(chuàng)建。 var stringObject = new String(hello world); String對象...
摘要:工廠模式?jīng)]有解決對象識別的問題即怎樣知道一個對象的類型構(gòu)造函數(shù)模式使用構(gòu)造函數(shù)的主要問題,就是每個方法都要在每個實(shí)例上重新創(chuàng)建一遍。創(chuàng)建要返回的對象可以在這里定義私有變量和函數(shù)添加函數(shù)注意寄生構(gòu)造函數(shù)中是返回對象注意寄生構(gòu)造函數(shù)中是 1、工廠模式 沒有解決對象識別的問題(即怎樣知道一個對象的類型) function createPerson(name, age, job) { ...
摘要:我在寫作的過程中,給自己提了一個要求盡量深入淺出,條理清晰。至于是否達(dá)到了,希望讀者們多多批評指正,并給我提意見和建議。第章介紹中的函數(shù)式編程,包括匿名函數(shù)閉包和裝飾器等。第章介紹使用處理進(jìn)程線程和協(xié)程。 showImg(https://segmentfault.com/img/remote/1460000007990784?w=268&h=385); 在學(xué)習(xí)和使用 Python 的過...
摘要:函數(shù)接收三個參數(shù)上下文節(jié)點(diǎn)表達(dá)式和可選的命名空間對象。命名空間對象應(yīng)該是下面這種字面量的形式。使用樣式表轉(zhuǎn)換文檔跨瀏覽器使用這個函數(shù)接收兩個參數(shù)要執(zhí)行轉(zhuǎn)換的上下文節(jié)點(diǎn)和文檔對象。 showImg(https://segmentfault.com/img/bVbvHVd?w=962&h=496); 本章主要講解了以下四個問題: 1、將XML解析為DOM文檔 跨瀏覽器把XML解析為DOM文...
摘要:哪吒社區(qū)技能樹打卡打卡貼函數(shù)式接口簡介領(lǐng)域優(yōu)質(zhì)創(chuàng)作者哪吒公眾號作者架構(gòu)師奮斗者掃描主頁左側(cè)二維碼,加入群聊,一起學(xué)習(xí)一起進(jìn)步歡迎點(diǎn)贊收藏留言前情提要無意間聽到領(lǐng)導(dǎo)們的談話,現(xiàn)在公司的現(xiàn)狀是碼農(nóng)太多,但能獨(dú)立帶隊的人太少,簡而言之,不缺干 ? 哪吒社區(qū)Java技能樹打卡?【打卡貼 day2...
閱讀 2503·2023-04-25 19:24
閱讀 1720·2021-11-11 16:54
閱讀 2845·2021-11-08 13:19
閱讀 3562·2021-10-25 09:45
閱讀 2568·2021-09-13 10:24
閱讀 3296·2021-09-07 10:15
閱讀 4059·2021-09-07 10:14
閱讀 2966·2019-08-30 15:56