为了账号安全,请及时绑定邮箱和手机立即绑定

js关于闭包的问题

js关于闭包的问题

狐的传说 2019-03-18 21:18:44
这个关于闭包的例子怎么理解var a = 1;function f(b){    return function g(c){        return function h(d){            return a + b + c +d;        }    }}var add2 = f(2);var add3 = add2(2);var r = add3(10);console.log(r);
查看完整描述

5 回答

?
汪汪一只猫

TA贡献1898条经验 获得超8个赞

这个没什么难的吧

r 的结果就是 a + b + c +d这点没疑问吧,先说a,本身没有a变量,会逐级往外层找,最终找到了全局作用域下的a,也就是1;b也是同理,只不过到f函数这里就不继续往上找了,此时的b为f函数的参数,在var add2 = f(2)的时候传过来了,也就是2,同理c也是2,d是10

所以r = 1 + 2 + 2 + 10 = 15


查看完整回答
反对 回复 2019-03-22
?
慕少森

TA贡献2019条经验 获得超9个赞

f(2)执行完,

返回给add2 = function g(c){


    return function h(d){

        return a + b + c +d;

    }

}

add2(2)执行完给

add3 = function h(d){


        return a + b + c +d;

    }

add3(10) 执行的时候就return 1+2+2+10了


a,b,c都有值是因为你这是个嵌套函数,没执行完是不会释放内存的,不知道这样你能不能理解


查看完整回答
反对 回复 2019-03-22
?
holdtom

TA贡献1805条经验 获得超10个赞

重新该写一下代码:


var add2 = function g(c) {

    return function h(d) {

        return 1 + 2 + c + d // 替换掉参数 a,b

    }

};


var add3 = function h(d) {

    return 1 + 2 + 2 + d // 替换掉参数c

};


var r = (1 + 2 + 2 + 10) // 替换参数d


查看完整回答
反对 回复 2019-03-22
?
慕哥6287543

TA贡献1831条经验 获得超10个赞

类似这样 每次执行返回一个新的函数 并缓存上一个函数的参数(如果有点话)


const a = 1;

const f = b => c => d => a + b + c + d;

f(2)(2)(10) // 2 => 2 => 10 => a + 2 + 2 + 10; return 15


查看完整回答
反对 回复 2019-03-22
  • 5 回答
  • 0 关注
  • 575 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号