Easyjs 細說Javascript里的 閉包(Closure)

要成為高級 JavaScript 程序員,就必須理解閉包。閉包有時你非用她不可, 所有理解閉包還是必要的。筆者通過例子來說一下“閉包”
1.定義一個函數的代理:

?

function?delegate?(fn,?scope,?args,?append)?{
????????
return?function?/*匿名函數1*/?()?{
????????????
var?callargs?=?Array.proptotype.slice(arguments,?0);
????????????
if?(append)
????????????????callargs??
=?callargs?.concat(args);
????????????fn.apply(scope?
||?window,?callargs?);
????????}
????}

?

?在上面這段代碼中就用到了閉包,即delegate方法里return 后面的函數(匿名函數1)就是閉包, 這個例子是個方法fn創建一個代理, 意思就是在執行方法fn的時候給他添加一些額外的參數或者改變fn執行的作用域,比如:

?

function?test_delegate()?{
?? ? ??var?fn?=?delegate(test,?window,?["11122",?"aaaa"],?true);?//給方法test?創建一個代理,?并傳人參數["11122",?"aaaa"]
???????fn("111");?//調用test的代理
}
function?test()?{?//輸出test的所有參數
?????var?arr?=[];
?????Easy.each(arguments,?
function?(item)?{
?????????arr.push(item);
?????});
??????alert(arr.join(
"\n"));
}?
?其中的test_delegate里調用的?fn("111"); 參數"111", 就是在delegate方法里的匿名函數1的arguments 在這個例子里test執行后會輸出:

?

111

11122
aaaa

?delegate方法出自Easy.js。下面粘貼一個ECMA 262 里對閉包的介紹
ECMA 262 Closure(英文)

為之漫筆 翻譯的ECMA 262 Closure

?

?

?

轉載于:https://www.cnblogs.com/Easyjs/archive/2011/02/27/1966218.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/448008.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/448008.shtml
英文地址,請注明出處:http://en.pswp.cn/news/448008.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

學習方法書籍 很好推薦

學習方法書籍:一《超級學習法》: 這是一種優秀的學習法。美國紐約華爾街10號的“超級記憶法有限公司”和保加利亞的羅扎諾夫學院都在推廣這一種學習方法。日本長野吉田高中應用該方法使學生平均成績提高20分,日本東海大學的關英男教授用這種方…

js 取兩位小數

var totalPrice (product.unitPrice * product.nums).toFixed(2);轉載于:https://www.cnblogs.com/yqlwl66/p/4155606.html

jQuery 實現表格與 ckeckbox 的全選、單選功能

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 功能點 1. 用戶點擊頭的checkbox時,所有表格數據行的checkbox全選或反選。 當數據行某一行沒有選中時,頭check…

jquery checkbox 選中、改變狀態、change 和 click 事件

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 jquery判斷checked的三種方法: ??????? .attr(checked); //看版本1.6返回:”checked”或”undefined” ;1.5-返回:true或false …

中醫教你5個補腎護發食療方

一個人的頭發有10萬到15萬根,每根頭發都有個毛囊,從毛囊里又生成毛球,長出頭發。頭發從長出到脫落,要經過3個周期,即成長期(約2~7年)、退縮期(約1個月)和休止期(約4個月)。 頭發的生長速度和密度隨年齡而變…

VUE:checkbox 單選框(單選、多選)、一選全選 / 全選一選、表格單選列實現

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 1. 效果:如紅框中部分。 一選全選:表頭上的單選框選中則下面每行都選中。 全選一選:表中數據每行都…

我愛學習第一天(委托)

---恢復內容開始--- 1.delegate 一般用法 delegate void WriteValue(string vale);//申明一個委托,參數是string類型,無返回值static void Main(string[] args){WriteValue write new WriteValue(WriteLine);//實例化委托write("喝水");//調用Console.ReadKey();}pu…

怎樣洗頭使頭發變黑變多

洗頭法 頭發變黑變粗--用淘米水洗頭。每天煮飯時會產生淘米水,請將淘米水留下,裝在一個容器內放上二天,讓它自然發酵。然后用來洗頭,三天洗一次,不出三個月,你的頭發就會變粗、變黑。 發酵后的淘米水會有一…

VUE:父子組件間傳參、子組件傳值給父組件、父組件傳值給子組件

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 Vue是一個輕量級的漸進式框架,對于它的一些特性和優點在此就不做贅述,本篇文章主要來探討一下Vue子父組件通信的…

c1科目三考試技巧

起步平穩。轉向燈不要錯了。靠邊要和路邊平行。離邊近量保持:30CM距離。車子在運行中。換檔盡量保持利落。若道路比較復雜。看好路牌路標,不要違規。一般很容易過的。你不要緊張。晚上夜考燈光把好。一切很順利的。祝你好運。 方法/步驟 緊記著“一燈二…

Astyle 一鍵格式化項目代碼

代碼格式化差異問題: 一個團隊有多個開發,因開發習慣不同,開發時少添加了空格、換行等。 格式化代碼時,一般會將整個文檔格式化,代碼提交時會發現未知的修改項。 Astyle格式化工具 官網下載地址:Artistic S…

淺談 JavaScript、ECMAScript (ES5、ES6)是什么、相互關系

一、ECMAScript 和 JavaScript 的關系 前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 ES6 ECMAScript6 從百度百科的資料上來看: ECMAScript是一種由Ecma國際通過ECMA-…

(2) MongoDB基本概念及與關系型數據庫的對照

MongoDB不是關系型數據庫,因此也就沒有了表,行等概念,但是有一些類似的概念,主要有 數據庫(Database),集合(Collection),文檔(Document&#xff0…

什么是 ES6 ?

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 ECMAScript 6(以下簡稱ES6)是JavaScript語言的下一代標準,已經在2015年6月正式發布了。Mozilla公司將…

史上最全換檔講解手動檔汽車的換擋技巧

轉個東東給大家看看,關于換檔的。在網上已有很多討論,涉及到的方面也林林總總。歸納一下的話,我覺得不外乎可以分為兩 大類,一是換擋時機,即何時加檔何時減檔;二是換擋本身的操作,包括換擋時油門…

CorelDRAW X7 X8 2017 2018是什么關系?

從CorelDRAW 2017版本開始我們叫習慣了的X幾系列的CorelDRAW毅然決然的就換了稱呼,所以有時候很多朋友對于軟件版本,經常會傻傻分不清,還有人認為X8版本比2017版本高,究竟為什么會這么認為呢? “幫我轉個X8吧”。 “我…

阮一峰 《ECMAScript 6 入門》:let 和 const 命令

以下內容全文出自 阮一峰的書: 《ECMAScript 6 入門》 電子版地址:ES 6標準入門(第3版) let 命令 基本用法 ES6 新增了let命令,用來聲明變量。它的用法類似于var,但是所聲明的變量,只在let命令…

怠速詳解

怠速狀態是指發動機空轉時一種工作狀況。在發動機運轉時,如果完全放松油門踏板,這時發動機就處于怠速狀態。調整怠速時轉速不能突高突低,否則會對發動機造成早期磨損,最好到汽車維修部門進行調整。中文名 怠數英文名 IDLE屬 性…

Python logger模塊

1 logging模塊簡介 logging模塊是Python內置的標準模塊,主要用于輸出運行日志,可以設置輸出日志的等級、日志保存路徑、日志文件回滾等;相比print,具備如下優點: 可以通過設置不同的日志等級,在release版本…

離合器半聯動

半聯動即離合器半聯動。 離合器半聯動是指離合器不穩定聯接的工作狀態,即駕駛員踩離合器踏板,使離合器壓板壓力逐步減小,造成主動盤與從動盤之間處于邊轉邊滑的狀態。在場內駕駛考試時,駕駛員由于操作不熟練,不能在要求…