【问题标题】:Why does the anonymous callback work but the named callback fail?为什么匿名回调有效但命名回调失败?
【发布时间】:2020-09-07 11:15:28
【问题描述】:

我有以下代码:

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

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

        leaf.setVelocityX(-50);
    }
}

但我收到错误“找不到名称 'leaf'”。

如果我像这样将回调设为匿名函数:

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

运行完全符合预期,这是为什么呢?

【问题讨论】:

    标签: javascript typescript callback phaser-framework


    【解决方案1】:

    这是因为在第一行中,您将变量leaf 作为参数传递,该变量之前未定义。

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

    但是,在 lambda 函数中,您调用的是正确定义的参数 leaf

    this.leaves.forEach((leaf) => { leaf.setVelocityX(-50)});
    //                    ^-defined   ^-called
    

    【讨论】:

    • 据我了解应该是直接this.leaves.forEach(this.leafFloat); 并且它正在为离开容器的每个孩子执行此功能
    • foreach 迭代的数组中传入项目值的正确方法是什么?文档使它看起来像你会怎么做? tutorialspoint.com/typescript/typescript_array_foreach.htm
    • 我认为这取决于。如果您要在代码的另一点重用 forEach 循环的功能,第一种方法会使您的代码保持干燥,因为它不会重复。如果它只是在那一刻使用,那么我更喜欢匿名/lambda 函数,因为这样你的代码会更干净。我认为你的情况是第二个,所以我会坚持使用 lambda。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多