Easyjs 细说Javascript里的 闭包(Closure)

原文链接:http://www.cnblogs.com/Easyjs/archive/2011/02/27/1966218.html  

要成为高级 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

上一篇:delegate & event 关键字


下一篇:Swift 协议protocol