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
这是闭包的典型例子,但我不知道怎么去理解闭包。谁能给我讲讲??
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
这是闭包的典型例子,但我不知道怎么去理解闭包。谁能给我讲讲??
function foo(){
var x = 0;
return function(){
return x;
}
}
var bar = foo()
这是闭包的典型例子,闭包按照这个例子说只是bar函数能够访问foo函数里的x变量。
闭包有两个比较明显的特点:
1、函数里面返回一个函数
2、函数里面的局部变量一直保存在内存中,不被回收。
官方的解释是:闭包是一个拥有许多变量
和绑定了这些变量的环境
的表达式(通常是一个函数
),因而这些变量也是该表达式的一部分。
闭包就是由函数创造的一个词法作用域,里面创建的变量被引用后,可以在这个词法环境之外自由使用。
闭包通常用来创建内部变量,使得这些变量不能被外部随意修改,同时又可以通过指定的函数接口来操作。
来张图:
8 回答4.5k 阅读✓ 已解决
6 回答3k 阅读✓ 已解决
5 回答2.6k 阅读✓ 已解决
5 回答6.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答2.4k 阅读
4 回答2.7k 阅读✓ 已解决
这是一个典型的 curry function。
我一直认为知乎上这个回答描述得非常好,而且很好理解,可以参考一下:
https://www.zhihu.com/questio...