Easyjs 细说Javascript里的 闭包(Closure)
生活随笔
收集整理的這篇文章主要介紹了
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
總結
以上是生活随笔為你收集整理的Easyjs 细说Javascript里的 闭包(Closure)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SOE服务的地址构建注意点_大小写
- 下一篇: HDU 3530