typescript - 如何将 TypeScript 变量声明为 volatile?
问题描述
我正在与BBC Micro Bit合作,并正在为 TypeScript 中的 Make Code 创建一个扩展。
我的机器人上的车轮编码器触发了以下事件。在事件内部,我增加了几个变量。在 Arduino 语言中,我将此类变量声明为“volatile”,表示该变量可以通过中断进行更改,从而确保我使用的是变量中的最新值。
control.onEvent(EventBusSource.MICROBIT_ID_IO_P0, EventBusValue.MICROBIT_PIN_EVT_RISE, function () {
_lTicks += 1;
_lerrTicks += 1;
if (_lTicks % _partialTurn == 0) {
_lTicks = 0;
_lTurns += .0625;
}
})
TypeScript 在声明变量时是否有等效的“volatile”关键字?如果是这样,它是如何实施的?
解决方案
Javascript 没有volatile
,因为 JavaScript 运行时是单线程的。这意味着没有任何东西可以中断此代码,并且在代码运行时没有其他代码可以更改状态。
一般来说,如果在一段代码的执行过程中发生了一个事件,该事件将被放入一个队列中,并且与该事件相关的代码只有在当前代码堆栈运行完成后才会执行。
即使WebWorkers
允许运行多个 JS 线程之类的事情也不会打破这个假设。相反,它们依赖于两个线程之间的消息传递,而不允许共享变量。
推荐阅读
- dialogflow-es - 对 Google 推送通知用户 ID 的操作
- javascript - HTML, Javascript, Node, Fetch get, "Uncaught (in promise) TypeError: Failed to fetch"
- r - 用R中的空格替换值
- python - 如何在嵌入消息中提及不和谐频道
- python - 无法从 Windows ps1 文件运行 python 文件
- glsl - 我如何标准化在 glsl 中绘制的圆圈,以使分辨率不会拉伸?
- sql - 如何删除左连接查询结果中的重复项
- opengl - 在片段着色器中将世界空间光位置转换为模型空间的问题
- json - 从 IBAction 调用的 dispatchqueue.main.async 中跳过了 Https 请求
- boost - 由于未定义对 Boost 和事件库的引用而无法编译?