JS闭包

立即执行函数和闭包有什么关系? https://segmentfault.com/q/1010000005007819/a-1020000005007914 

面试题:为什么要用闭包? https://segmentfault.com/q/1010000007578832?_ea=1390620

JS闭包是什么? https://blog.csdn.net/weixin_39194176/article/details/80909666

ECMAScipt闭包(closure) http://www.w3school.com.cn/js/pro_js_functions_closures.asp

闭包是函数与声明函数的词法语境的组合 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures

闭包的本质在于“闭”和“包”,即把一些变量封闭起来,使其它程序访问不到,同时把这个封闭的东西打成包甩出来,让大家可以直接用这个包(函数)。最典型的实现之一是对象(或类)的私有成员,如

function MyClass() {
    // 这是一个封闭在 MyClass 中的局部变量
    var _name;
    
    // 这是一个甩出来的“包”
    this.getName = function() {
        return _name;
    };
    
    // 这是另一个甩出来的“包”
    this.setName = function(name) {
        // 这保证了 _name 的第一个字母和空格后的第一个字母是大写
        // 而且因为闭包的原因,_name 不可能被 MyCLass() 外的程序访问到
        // 也就保证了上述命名规则的无例外执行
        _name = name.replace(/^.|\s./g, function(s) {
            return s.toUpperCase();
        });
    };
}

var p = new MyClass();
p.setName("james fancy");
console.log(p.getName());   // James Fancy

匿名函数通常只是用于给成员赋值,比如上例中的 getName 和 setName;也有可能用于立即执行函数,比如你的那段代码,这会将全局变量局部化,避免全局污染。

闭包常常会和匿名函数一起使用,但他们之间并没有密不可分的关系。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值