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

JS面试题,等一个大佬出现,解决小弟的疑惑

JS面试题,等一个大佬出现,解决小弟的疑惑

FFIVE 2019-03-02 18:12:59
正确答案为0,-8,-14,-14执行fn(1),全局i=4,私有n=1。执行f(2),全局i=0,私有n=0。执行fn(3)(4),全局i=-8 (n--后为2,这里的n我用在了下段代码的计算中,并且导致和正确答案不相符,如果是用2计算的话,下段执行i为0)。执行f(5),全局i=-14 {使我想不通的是,为什么此段代码中的n不是fn(3)(4)执行后的n,而是fn(1)中的n}console.log(i) //-14      let i=2         let fn=function(n){             i*=2             return function(m){                 i-=(n--)+(++m)                console.log(i)             }         }        let f=fn(1)         f(2)         fn(3)(4)         f(5)        console.log(i)
查看完整描述

2 回答

?
绝地无双

TA贡献1946条经验 获得超4个赞

每次执行fn都会返回一个新的匿名函数 你的fn(1)返回来的函数已经用一个f变量缓存起来了 所以后面调用f(2)
f(5) 里面n都是fn(1)里的那个1
fn(3)(4) 首先执行fn(3) 返回来一个匿名函数 这个匿名函数和fn(1)返回来的匿名函数 虽然作用是一样 但其实是两个匿名函数

你第一次执行f(2) n的值已经变成了0
第二次执行f(5)的时候 i = -8; m = 5; n = 0
所以i-=(n--)+(++m)的值为-14


查看完整回答
反对 回复 2019-03-02
?
大话西游666

TA贡献1817条经验 获得超14个赞

理解下闭包,++n与n++的区别后,这道题就是个算术题

需要认真才行


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

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信