为什么匿名回调有效而命名回调失败?

问题描述 投票:0回答:1

我有下面的代码,但我得到的错误是 "Cannot find name 'leaf'"。

this.leaves.forEach(this.leafFloat(leaf));

private leafFloat(leaf: Phaser.Physics.Arcade.Sprite): () => void {
    return function() { 

        leaf.setVelocityX(-50);
    }
}

但我得到了 "无法找到'叶子'这个名字 "的错误信息。

如果我把回调做成一个匿名函数,就像这样。

this.leaves.forEach((leaf) => { leaf.setVelocityX(-50)});

就能如期运行,为什么会这样?

javascript typescript callback
1个回答
0
投票

这是因为在第一行中,你把变量 leaf,这在之前没有定义。

this.leaves.forEach(this.leafFloat(leaf));
//                                  ^- here

然而,在lambda函数中,你调用的参数是 leaf,这是正确的定义。

this.leaves.forEach((leaf) => { leaf.setVelocityX(-50)});
//                    ^-defined   ^-called
© www.soinside.com 2019 - 2024. All rights reserved.