輕松學(xué)習(xí)Javascript閉包函數(shù)
閉包函數(shù)是什么?在開(kāi)始學(xué)習(xí)的閉包的時(shí)候,大家很能都比較難理解.就從他的官方解釋來(lái)說(shuō),都是比較概念化的.
不過(guò)我們也還是從閉包的含義出發(fā)。
閉包是指函數(shù)有自由獨(dú)立的變量。換句話說(shuō),定義在閉包中的函數(shù)可以“記憶”它創(chuàng)建時(shí)候的環(huán)境。
官方解釋說(shuō)完后,我們先來(lái)看一個(gè)簡(jiǎn)單計(jì)數(shù)的例子.
var c = 0; function count(){ c++; } count();// 1 count();// 2
這個(gè)例子是利用了全局變量來(lái)實(shí)現(xiàn),但是這里有個(gè)問(wèn)題是,c這個(gè)變量也容易被其他方式所調(diào)用,這時(shí)候就可能會(huì)改變 c 的存儲(chǔ)值.造成這個(gè)count計(jì)數(shù)的失效.那怎么很好的處理這個(gè)問(wèn)題呢!我們會(huì)想到的是使用局部變量的方式來(lái)處理.比如:
function count(){ var c = 0; function add(){ c++; } add(); } count();// c = 1 count();// c = 1
因?yàn)檫@樣創(chuàng)建之后,內(nèi)部變量只存在于count函數(shù)創(chuàng)建執(zhí)行的時(shí)候,執(zhí)行完之后,整個(gè)函數(shù)就會(huì)被丟棄掉.就無(wú)法達(dá)到有記憶的能力.那要怎么來(lái)實(shí)現(xiàn)呢?那我們就用閉包來(lái)解決.我要重新提一次:閉包 = 函數(shù) + 環(huán)境
function count(){ var c = 0; function add(){ c++; } return add; } var ct = count(); ct(); // c = 1 ct(); // c = 2
這個(gè)時(shí)候我們就可以通過(guò)這個(gè)閉包來(lái)完成計(jì)數(shù)的能力.ct就是一個(gè)閉包函數(shù),內(nèi)部的環(huán)境就是這個(gè)局部變量 c. 這里我們達(dá)到的就是內(nèi)部數(shù)據(jù),外部來(lái)操作.那閉包除了這個(gè)還有什么其他功能呢?
用閉包模擬私有方法
這有點(diǎn)像JAVA的私有方法或者私有變量,只能允許自己來(lái)操作!如果外部操作,就需要設(shè)定公開(kāi)的方法來(lái)操作.
var person = (function(){ var _name = "編程的人"; var age = 20; return { add:function(){ age++; }, jian:function(){ age--; }, getAge:function() { return age; }, getName:function(){ return _name; }, setName: function (name) { _name = name; } } })(); person.add(); var age = person.getAge(); console.log(age) person.setName("編程的人公眾號(hào):bianchengderen") console.log(person.getName())
這里應(yīng)該很容易理解了吧! 有點(diǎn)面向?qū)ο缶幊痰母杏X(jué)。當(dāng)然Javascript現(xiàn)在也有面向?qū)ο缶幊痰奶攸c(diǎn).這點(diǎn)我們以后來(lái)說(shuō)明.
目前為止,我們從計(jì)數(shù)到內(nèi)部私有化的例子,來(lái)說(shuō)明閉包,希望大家能簡(jiǎn)單明白其中的道理,當(dāng)然閉包還有其他的功能利用是比較方便的。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)javascript程序設(shè)計(jì)有所幫助。
- JavaScript閉包函數(shù)訪問(wèn)外部變量的方法
- javascript中的return和閉包函數(shù)淺析
- js實(shí)現(xiàn)拖拽 閉包函數(shù)詳細(xì)介紹
- javascript高級(jí)編程之函數(shù)表達(dá)式 遞歸和閉包函數(shù)
- javascript 閉包函數(shù)做顯隱內(nèi)容
- 淺談JavaScript的閉包函數(shù)
- JavaScript 匿名函數(shù)(anonymous function)與閉包(closure)
- js bind 函數(shù) 使用閉包保存執(zhí)行上下文
- 弱類(lèi)型語(yǔ)言javascript中 a,b 的運(yùn)算實(shí)例小結(jié)
相關(guān)文章
js實(shí)現(xiàn)點(diǎn)擊按鈕彈出上傳文件的窗口
本文主要介紹了js實(shí)現(xiàn)點(diǎn)擊按鈕彈出上傳文件的窗口的實(shí)例方法。具有很好的參考價(jià)值,需要的朋友一起來(lái)看下吧2016-12-12js實(shí)現(xiàn)隨機(jī)抽選效果、隨機(jī)抽選紅色球效果
本文主要分享了js實(shí)現(xiàn)隨機(jī)抽選效果、隨機(jī)抽選紅色球效果的示例代碼。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧2017-01-01基于JavaScript+HTML編寫(xiě)一個(gè)日期選擇插件
在現(xiàn)代Web應(yīng)用程序中,日期選擇器是一個(gè)非常常見(jiàn)的組件,用戶可以使用它來(lái)選擇特定的日期,在本篇文章中,我們將使用JavaScript和HTML來(lái)創(chuàng)建一個(gè)簡(jiǎn)單但功能強(qiáng)大的日期選擇插件,這個(gè)日期選擇插件是比較考驗(yàn)Js基本功的,需要的朋友可以參考下2023-10-10JS實(shí)現(xiàn)的Unicode編碼轉(zhuǎn)換操作示例
這篇文章主要介紹了JS實(shí)現(xiàn)的Unicode編碼轉(zhuǎn)換操作,結(jié)合完整實(shí)例形式分析了javascript實(shí)現(xiàn)Unicode編碼轉(zhuǎn)換的具體操作技巧,需要的朋友可以參考下2017-04-04js學(xué)習(xí)總結(jié)之DOM2兼容處理順序問(wèn)題的解決方法
這篇文章主要為大家詳細(xì)介紹了DOM2兼容處理順序問(wèn)題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-07-07