请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

偶然返现,您闭包代码里传参数a之后就不对了(请看代码),请老师指点迷津

 function print() {
        let a = 200;
        fn(a);//这里就相当于传入200了吗?外边的a=100没有跟过来吗?
    }
    let a = 100;
    function fn(a) {
        console.log(a);
    }
    print(fn)//200
//这里输出的是200了,这是为什么呢?里面的原理是什么呢?

正在回答

4回答

你代码的第三行,执行 fn(a) 时,a 就是第二行定义的 200 ,不是传递的参数。

建议你再把闭包这块重新看一遍,重新捋一下。

0 回复 有任何疑惑可以回复我~
  • 提问者 JavaScript__yxq #1
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-05-13 00:35:05
Best_Coder_LCN 2023-02-24 13:02:34
function print() {
  let a = 200;
  fn(a);
}
let a = 100;
function fn(b) {   // 把这里改成b是不是就很清楚了?
  console.log(b);
}
print(fn); //200

你只是传了一个函数给print,压根没带上 a =100

你把fn定义的地方改成这样

function fn() {     // 这里把a去掉
    console.log(a);
}

这样才算是引用了函数外部的变量,形成了闭包,把 a=100 给传了进去。这样的运行结果才是100

1 回复 有任何疑惑可以回复我~
promise丶丶 2021-11-28 21:33:52

https://img1.sycdn.imooc.com//szimg/61a383ee09d11ae707890648.jpg

https://img1.sycdn.imooc.com//szimg/61a384fd0904295c07130061.jpg

那个函数FN形参a,那里可以看成是一个作用域。闭包,它的那个自由变量查找的话是在函数定义的地方向上一级作用域查找。那它的上一级作用域的话就是那个形参a那里。


0 回复 有任何疑惑可以回复我~
提问者 JavaScript__yxq 2021-04-06 16:25:41
???
0 回复 有任何疑惑可以回复我~
  • # 你这里代码是有问题的
    * 1、print定义时候没有参数,你调用时候传了个fn,实际相当于你单独调用print,执行的是print里的fn(a),而a在print函数的作用域里被定义的是200,所以返回200
    * 2、print(fn) 这里fn函数定义也是有参数的,而你没有传
    回复 有任何疑惑可以回复我~ 2021-04-19 23:19:46
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信