为什么setTimeout无法运行? (范围链)

时间:2019-06-18 22:38:39

标签: javascript settimeout setinterval

我正在尝试在函数中运行setTimeout,以便在一秒钟后,所选图像将更改。

简而言之,当我按下空格键时,我的程序应该:

  • 将图片更改为其他图片(有效)
  • 保持图像(工作中)的负y轨迹
  • 等待一秒钟,然后调用更改图像的方法(不起作用)

这是我的代码:

    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的语法(箭头功能)有关?

任何见识都会受到赞赏。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

由于class声明(我怀疑您在class主体内),所以您的代码隐含在 strict模式中运行,因此将一个赋值给一个先前未声明的变量是非法的,因此是例外。在非严格模式下,分配将创建一个全局变量。如果使用const / var / let声明进行重构,则可以。您还可以内联函数声明,并使用function关键字声明,使您可以为此函数命名,并在抛出该函数时有更好的stacktrace。