js闭包谁能给我讲讲?

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

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

阅读 3.6k
5 个回答

这是一个典型的 curry function。

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

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

function foo(){
    var x = 0;
    return function(){
        return x;
    }
}
var bar = foo()

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

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

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

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

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

来张图:

clipboard.png

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏