来个大神解释下这个闭包

牧之~ 2018-10-16 02:35:34
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Closures
文章有个例子代码如下:

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


要我说都等12,但是结果是7和12。看了文章的解释,感觉太简单,不能理解。
...全文
217 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
天际的海浪 2018-10-16
  • 打赏
  • 举报
回复
引用
  如果返回值是一个对象,那么this指向的就是那个返回的对象,如果返回值不是一个对象那么this还是指向函数的实例。
1 不是对象。无法代替原本的this对象返回
牧之~ 2018-10-16
  • 打赏
  • 举报
回复
https://www.cnblogs.com/pssp/p/5216085.html 更新一个小问题当this碰到return时 之后的
牧之~ 2018-10-16
  • 打赏
  • 举报
回复
引用 5 楼 jslang 的回复:
楼上的几位没理解楼主的问题,楼主以为x变量只有一个,第二次赋值的10会覆盖之前的5,实际上x变量有2个,分别存储着5和10。 要了解闭包的特性,就要先了解函数与局部作用域。 一个函数在执行时会先创建一个局部作用域,之后在这个函数内声明的变量与子函数都会放到这个局部作用域中。 闭包是指子函数会与其所在的局部作用域绑定在一起。只要这个子函数存在,子函数所在的局部作用域和局部作用域中的局部变量就一直存在,不会被系统回收。可以让子函数内始终能访问局部作用域中的局部变量。 你的makeAdder函数执行了2次,就创建了2个局部作用域。每个局部作用域都有一个x变量与子函数,每个子函数中访问的x都是与子函数在同一个局部作用域中的x变量

function fn()  
{  
    this.user = '追梦子';  
    return 1;
}
var a = new fn;  
console.log(a.user); //追梦子
这个例子又说明了什么?
天际的海浪 2018-10-16
  • 打赏
  • 举报
回复
楼上的几位没理解楼主的问题,楼主以为x变量只有一个,第二次赋值的10会覆盖之前的5,实际上x变量有2个,分别存储着5和10。 要了解闭包的特性,就要先了解函数与局部作用域。 一个函数在执行时会先创建一个局部作用域,之后在这个函数内声明的变量与子函数都会放到这个局部作用域中。 闭包是指子函数会与其所在的局部作用域绑定在一起。只要这个子函数存在,子函数所在的局部作用域和局部作用域中的局部变量就一直存在,不会被系统回收。可以让子函数内始终能访问局部作用域中的局部变量。 你的makeAdder函数执行了2次,就创建了2个局部作用域。每个局部作用域都有一个x变量与子函数,每个子函数中访问的x都是与子函数在同一个局部作用域中的x变量
牧之~ 2018-10-16
  • 打赏
  • 举报
回复
引用 3 楼 u013116426 的回复:
2+5 和 2+10能一样吗

哎呦卧槽
___紫菜 2018-10-16
  • 打赏
  • 举报
回复
2+5 和 2+10能一样吗
75闪光雷 2018-10-16
  • 打赏
  • 举报
回复
5+2=7 10+2=12 这有啥不能理解的

87,994

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧