为什么 setTimeout 不是 运行? (作用域链)
Why is setTimeout not running? (scope chain)
我正在尝试 运行 setTimeout
在一个函数中,这样一秒钟后,所选图像就会改变。
简而言之,当我按下 space 栏时,我的程序应该:
- 将图像更改为不同的图像(有效)
- 保持图像的负 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
?
的语法(箭头函数)有关
如有任何见解,我们将不胜感激。
您正在尝试将 turnDown
分配给不存在的内容 - 只需在它之前添加一个 var
- var turnDown = ...
由于 class
声明,您的代码在 严格模式 中隐含地 运行 (我怀疑您在 class
体内) ,因此对先前未声明的变量的赋值是非法的,因此是异常。在非严格模式下,赋值会创建一个全局变量。如果您使用 const
/ var
/ let
声明进行重构,这会很好。您还可以内联函数声明,并使用 function
关键字声明,这样您就可以为该函数命名,并在它抛出时提供更好的堆栈跟踪。
我正在尝试 运行 setTimeout
在一个函数中,这样一秒钟后,所选图像就会改变。
简而言之,当我按下 space 栏时,我的程序应该:
- 将图像更改为不同的图像(有效)
- 保持图像的负 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
?
如有任何见解,我们将不胜感激。
您正在尝试将 turnDown
分配给不存在的内容 - 只需在它之前添加一个 var
- var turnDown = ...
由于 class
声明,您的代码在 严格模式 中隐含地 运行 (我怀疑您在 class
体内) ,因此对先前未声明的变量的赋值是非法的,因此是异常。在非严格模式下,赋值会创建一个全局变量。如果您使用 const
/ var
/ let
声明进行重构,这会很好。您还可以内联函数声明,并使用 function
关键字声明,这样您就可以为该函数命名,并在它抛出时提供更好的堆栈跟踪。