偶然返现,您闭包代码里传参数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回答
-
你代码的第三行,执行 fn(a) 时,a 就是第二行定义的 200 ,不是传递的参数。
建议你再把闭包这块重新看一遍,重新捋一下。
012021-05-13 -
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
10 -
promise丶丶
2021-11-28
那个函数FN形参a,那里可以看成是一个作用域。闭包,它的那个自由变量查找的话是在函数定义的地方向上一级作用域查找。那它的上一级作用域的话就是那个形参a那里。
00 -
JavaScript__yxq
提问者
2021-04-06
???
012021-04-19
相似问题