javascript - JavaScript:全局变量似乎被覆盖
问题描述
我目前正在处理以下代码,它应该只保存第一个位置。之后检测到的任何内容都应忽略:
var markerPos;
var markerAlreadyDetected = false;
AFRAME.registerComponent('barcode_marker', {
init: function () {
const marker = document.querySelector('#marker');
marker.addEventListener('markerFound', function () {
console.log("Marker Already Detected:", markerAlreadyDetected);
if (!markerAlreadyDetected) {
markerAlreadyDetected = true;
markerPos = marker.getAttribute('position');
console.log("Saved new marker location.", markerPos);
} else {
console.log("Already detected marker.");
}
console.log("Saved marker position:", markerPos);
});
}
});
即使if(!markerAlreadyDetected)
正确执行,全局变量似乎每次都在变化,标记被检测到。
这是一些控制台输出。
解决方案
这篇文章最初是由VLAZ作为评论发布的。
您正在分配一个对象,这意味着它可以自由更改而无需您重新分配它。如果您需要维护对象的具体状态,则需要对其进行克隆或仅从中获取所需的原始值。
推荐阅读
- node.js - 在 Git/VS Code 中创建新分支时,CSS 文件更改不断重置
- sql-server - 需要帮助调整特定输出的查询
- r - 将闪亮的 DT 单元格复制到用户剪贴板
- angular - 反应式表单异步验证器未将错误设置为 FormGroup
- python - 如何使用 sklearn 转换器创建两组特征之间的所有交互变量?
- saml-2.0 - 如果未在服务集合中配置 .pfx 文件,则 Sustainsys.Saml2 注销不起作用
- c++ - 有没有一种巧妙的方法可以避免在 C++ 中使用嵌套类进行额外填充?
- firebase - 添加 firebase 插件会影响“flutter run”的行为方式吗?
- python - 基于掩码删除日期子字符串
- angular - Angular 材质多个项目拖放