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

来源:6-3 什么是闭包?闭包会用在哪里?

JavaScript__yxq

2021-04-06

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

4回答

双越

2021-04-06

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

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

0
1
JavaScript__yxq
非常感谢!
2021-05-13
共1条回复

Best_Coder_LCN

2023-02-24

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
0

promise丶丶

2021-11-28

//img.mukewang.com/szimg/61a383ee09d11ae707890648.jpg

//img.mukewang.com/szimg/61a384fd0904295c07130061.jpg

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


0
0

JavaScript__yxq

提问者

2021-04-06

???
0
1
起点丶
# 你这里代码是有问题的 * 1、print定义时候没有参数,你调用时候传了个fn,实际相当于你单独调用print,执行的是print里的fn(a),而a在print函数的作用域里被定义的是200,所以返回200 * 2、print(fn) 这里fn函数定义也是有参数的,而你没有传
2021-04-19
共1条回复

一天时间高效准备前端技术一面 匹配大厂面试要求

针对时下面试高频考点,帮助新人js面试快速通关

4709 学习 · 1682 问题

查看课程