JavaScript之函数与闭包

与C++不同的是,JavaScript中的函数,既可以在参数中,接收其他的函数,又可以讲函数作为返回值。当我们并不需要立刻得到一个函数的计算结果,而是根据实际需要,把函数作为返回值传递出去。

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]);
f();

只有当f调用时才会计算求和的结果
不难发现,在lazy_sum中定义的sum函数的参数,其实来自函数外的参数

那么…
JavaScript为什么需要闭包呢?
在C++中,我们为了实现类中的封装,使用了private修饰了一个成员变量,类中的成员可以使用private变量,而外部调用的类的变量则无法使用,但是JavaScript是没有class这个概念的

在只有函数的语言里,借助闭包,我们依然可以封装一个私有变量

'use strict';
function create_counter(initial) {
    var x = initial || 0;
    return {
        inc: function () {
            x += 1;
            return x;
        }
    }
}

c_c函数中实现了闭包,闭包中包含c_c的局部变量x,在外部无法调用到x,只能调用inc()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值