原来闭包并没那么难理解
函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回。 我们来实现一个对 Array 的求和。通常情况下,求和的函数是这样定义的: function sum ( arr ) { return arr . reduce ( function ( x , y ) { return x + y ; } ) ; } sum ( [ 1 , 2 , 3 , 4 , 5 ] ) ; // 15 但是,如果不需要立刻求和,而是在后面的代码中,根据需要再计算怎么办?可以不返回求和的结果,而是返回求和的函数! function lazy_sum ( arr ) { var sum = function ( ) { return arr . reduce ( function ( x , y ) { return x + y ; } ) ; } return sum ; } 当我们调用 lazy_sum ()时,返回的并不是求和结果,而是求和函数: var f = lazy_sum ( [ 1 , 2 , 3 , 4 , 5 ] ) ; // function sum() 调用函数 f 时,才真正计算求和的结果: f ( ) ; // 15 在这个例子中,我们在函数 lazy_sum 中又定义了函数 sum ,并且,内部函数 sum 可以引用外部函数 lazy_sum