为什么 setTimeout 不是 运行? (作用域链)

Why is setTimeout not running? (scope chain)

我正在尝试 运行 setTimeout 在一个函数中,这样一秒钟后,所选图像就会改变。

简而言之,当我按下 space 栏时,我的程序应该:

这是我的代码:

    jump() {
        console.log("space bar pressed to jump");
        this.setDirection(Constants.SKIER_DIRECTIONS.JUMP_ONE);
        turnDown = () => { this.setDirection(Constants.SKIER_DIRECTIONS.DOWN); }
        setTimeout(turnDown, 1000);
     }

动画图像会无限期地停留,而不是回到原始图像。

这是我收到的错误消息:

Uncaught ReferenceError: turnDown is not defined

我看过类似的帖子,它们的结构与我的非常相似,但也许这与我 turnDown?

的语法(箭头函数)有关

如有任何见解,我们将不胜感激。

您正在尝试将 turnDown 分配给不存在的内容 - 只需在它之前添加一个 var - var turnDown = ...

由于 class 声明,您的代码在 严格模式 中隐含地 运行 (我怀疑您在 class 体内) ,因此对先前未声明的变量的赋值是非法的,因此是异常。在非严格模式下,赋值会创建一个全局变量。如果您使用 const / var / let 声明进行重构,这会很好。您还可以内联函数声明,并使用 function 关键字声明,这样您就可以为该函数命名,并在它抛出时提供更好的堆栈跟踪。