采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
function print() { let a = 200; fn(a);//这里就相当于传入200了吗?外边的a=100没有跟过来吗? } let a = 100; function fn(a) { console.log(a); } print(fn)//200 //这里输出的是200了,这是为什么呢?里面的原理是什么呢?
你代码的第三行,执行 fn(a) 时,a 就是第二行定义的 200 ,不是传递的参数。
建议你再把闭包这块重新看一遍,重新捋一下。
非常感谢!
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
那个函数FN形参a,那里可以看成是一个作用域。闭包,它的那个自由变量查找的话是在函数定义的地方向上一级作用域查找。那它的上一级作用域的话就是那个形参a那里。
???
# 你这里代码是有问题的 * 1、print定义时候没有参数,你调用时候传了个fn,实际相当于你单独调用print,执行的是print里的fn(a),而a在print函数的作用域里被定义的是200,所以返回200 * 2、print(fn) 这里fn函数定义也是有参数的,而你没有传
登录后可查看更多问答,登录/注册
针对时下面试高频考点,帮助新人js面试快速通关
1.6k 17
1.8k 11
1.3k 11