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

访问内部回调的回调参数

访问内部回调的回调参数

Qyouu 2021-05-11 13:24:43
我正在尝试理解此代码。let a = [1, 2, 3, 4, 5];a.forEach(i => {  setTimeout(i => {    console.log(i);  }, 1000);});为什么它给出如下输出:5 times: undefined我知道javascript异步执行代码和调度setTimeout功能,当迭代停止时,的最后一个值i是不确定的,但为什么是不确定的。难道在javascript我们无法访问外回调参数的范围是什么?
查看完整描述

3 回答

?
森栏

TA贡献1810条经验 获得超5个赞

那只是标准阴影。


考虑以下代码:


let x = "outer";

console.log(x);

{

    let x = "inner";

    console.log(x);

}

console.log(x);

内部块无法访问外部块,x因为它已声明了同名的局部变量。

同样,在您的代码中有两个变量称为i

    a.forEach(i => {        
            setTimeout(i => {

唯一的区别是它们是函数参数,而不是用声明let。除此之外,它们以相同的方式工作:内部i遮蔽外部i,防止访问。要解决此问题,只需移除inner即可isetTimeout无论如何,不会将任何有用的参数传递给回调。


查看完整回答
反对 回复 2021-05-27
?
守着一只汪

TA贡献1872条经验 获得超3个赞

只是删除了i在setTimeout


let a = [1,2,3,4,5];

a.forEach((i) => {

    setTimeout(() => {

        console.log(i);

    }, 1000);

});


查看完整回答
反对 回复 2021-05-27
?
qq_笑_17

TA贡献1818条经验 获得超7个赞

您的内部回调函数有一个名为的参数i,它会遮盖外部变量i

setTimeout()不会将任何参数传递到其回调,因此内部iundefined

要使用外部回调中的参数或变量,只需使用它。


查看完整回答
反对 回复 2021-05-27
  • 3 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

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