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

 

 

 

posted @ 2011-02-27 13:30  EasyJS Framework  阅读(1806)  评论(4编辑  收藏  举报
我没读过多少书,没有文采,请海涵!