javascript - js闭包谁能给我讲讲?
巴扎黑
巴扎黑 2017-04-11 09:53:58
[JavaScript讨论组]
function makeAdder(x) {
  return function(y) {
    return x + y;
  };
}

var add5 = makeAdder(5);
var add10 = makeAdder(10);

console.log(add5(2));  // 7
console.log(add10(2)); // 12

这是闭包的典型例子,但我不知道怎么去理解闭包。谁能给我讲讲??

巴扎黑
巴扎黑

全部回复(5)
伊谢尔伦

这是一个典型的 curry function。

我一直认为知乎上这个回答描述得非常好,而且很好理解,可以参考一下:

https://www.zhihu.com/questio...

PHP中文网
function foo(){
    var x = 0;
    return function(){
        return x;
    }
}
var bar = foo()

这是闭包的典型例子,闭包按照这个例子说只是bar函数能够访问foo函数里的x变量。

PHP中文网

https://segmentfault.com/q/10...

PHP中文网

闭包有两个比较明显的特点:

1、函数里面返回一个函数
2、函数里面的局部变量一直保存在内存中,不被回收。

官方的解释是:闭包是一个拥有许多变量绑定了这些变量的环境的表达式(通常是一个函数),因而这些变量也是该表达式的一部分。

闭包就是由函数创造的一个词法作用域,里面创建的变量被引用后,可以在这个词法环境之外自由使用。
闭包通常用来创建内部变量,使得这些变量不能被外部随意修改,同时又可以通过指定的函数接口来操作。

来张图:

阿神

JS闭包

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号