对于持续运行的函数,我应该全局使用 LET 声明变量吗?

2024-06-28

这里最相关的答案没有提到let,这是块作用域,但是var,被吊起。对此我似乎无法得到明确的答案。

我有一个全局声明的变量,该变量初始化一次:

let firePaused = false;

然后是键盘处理程序中的一个函数,每次按下按钮时都会运行:

function actOnKeyPress() {
  if (rightPressed) {
    game.hero.rotate(game.hero.speed);
  } else if (leftPressed) {
    game.hero.rotate(-game.hero.speed);
  }
  if (!firePressed) {
    firePaused = false;
  }
  if (firePressed && options.numberOfBullets > 0) {
    if (!firePaused) {
      fireBullet();
      firePaused = true;
    }
  }
}

(与问题无关,但其目的是只允许玩家开火一次,在再次开火之前需要有一个按键事件)

根据干净代码的规则,我应该在函数顶部声明变量......但这意味着每次按下按钮时都会重新声明它。

这里说https://www.sitepoint.com/how-to-declare-variables-javascript/ https://www.sitepoint.com/how-to-declare-variables-javascript/

初始化:当你声明一个变量时,它会自动初始化 初始化,这意味着内存被分配给变量 JavaScript 引擎。

所以我每次都会创建一个全新的变量let使用关键字。

我是否应该在函数开头编写一个条件来检查是否firePaused已经宣布了,如果不宣布呢?这似乎完全是矫枉过正。


如果您的变量是在全局范围内声明的,那么您是否使用并不重要let or var.

它们在功能上是相同的:

let myVar = 123;
function doStuff() {
  console.log(myVar);
}
doStuff();
var myVar = 123;
function doStuff() {
  console.log(myVar);
}
doStuff();

和...之间的不同var and let当您在块中声明它们时变得很重要:

if(true) {
  var foo = 1;
}
if(true) {
  let bar = 2;
}

console.log("var foo:", foo);
console.log("let bar:", bar);

如您所见,let声明仅限于其包装块范围。这var声明忽略块作用域。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

对于持续运行的函数,我应该全局使用 LET 声明变量吗? 的相关文章

  • WKScriptMessageHandler 不会侦听网页上按钮元素上的“onclick”或“click”事件。网页是使用Reactjs开发的

    我正在使用一个WKWebView在 UIViewController 的视图中使用 url 端点显示托管在服务器上的网页 该网页使用Reactjs 这就是我所掌握的有关该网页的所有信息 该代码创建一个 Web 视图并将该 Web 视图作为控
  • 为什么我的 OpenLayers 3 地图未在 Internet Explorer 11 中显示?

    I am trying to serve up a map in Internet Explorer that works fine in Firefox or Chrome While debugging I noticed that s
  • 在 location.reload() 之后保持滚动位置

    我使用ajax 来更新所选的照片 如果成功 则刷新页面 用户可以看到所选的图像 它将有一个CSS边框 但当页面刷新时 位置又会回到顶部 我想知道重载后如何保持位置 我搜索了很多网站 仍然无法得到它 请指导我一下谢谢 EDIT 我在这里找到了
  • HTML 使用 Javascript 比较 2 个日期

    我正在尝试使用 Javascript 比较 2 个日期 如果 myDateL 位于 mydateR 之后 则单击该按钮时会显示一个消息框 我的代码有什么问题吗 我知道我见过类似的线程 但我无法理解 我希望有人能帮助我解决这个问题
  • 如何使用 JavaScript 写入不同的网页?

    我正在尝试从一个网页获取用户输入并将其写入已存在的另一个网页 如果重要的话 所有网页都在同一个域中 我调试 JavaScript 见下文 并看到它正确地迭代 for 循环并构建要写入的正确信息 但它不会将其写入其他网页 不确定我做错了什么
  • 检测 Javascript 内存泄漏并优化代码

    与 xdebug webgrind 类似 它为我们提供了文件等中每个函数的大致执行时间 我想知道如何进行优化以及检测缓慢的 javascript 函数 我确信萤火虫可能可以做到这一点 但我不确定如何做到 有人可以指导我如何检测内存泄漏吗 如
  • 解析:删除用户及其相关记录

    我有带有实体的解析表 用户 默认类别 Commets 带有指向 User 实体的指针的类 我需要从实体 User 中删除用户及其所有评论 位于 Comments 实体中 现在我有 JS Cloud 代码 Parse Cloud define
  • jQuery 在变量中搜索文本?

    我有一个变量 其中包含一些文本 一些html 基本上可以是一个字符串 我需要在变量中搜索特定字符串 以便在包含该变量时以不同方式处理该变量 这是我正在尝试做的事情的一个片段 显然不起作用 each data results function
  • 使用 Razor,如何将布尔值渲染为 JavaScript 变量?

    如何将布尔值呈现给 cshtml 文件中的 JavaScript 变量 目前这显示了一个语法错误 您可能还想尝试 isFollowing Model IsFollowing true 更好的方法是使用 isFollowing Json En
  • 使用 Getter 函数从 Angular 服务公开对象返回未定义

    这是代码 authServ getUser 从任何地方返回 一个空对象 对应于此 var 的声明 即使在我根据此 问题 1 对返回语法进行修改之后也是如此 谁能告诉我这是什么问题吗 我不明白为什么它不起作用 app factory auth
  • javascript 权限被拒绝访问属性

    我在从不同的 iframe 访问属性时遇到问题 我不断收到此权限被拒绝访问属性错误 我见过有人多次询问他们是否使用 file 但没有人 除了我 所以这个问题永远不会得到解决 我不会在网络上这样做 我所有帧的 src 都位于硬盘驱动器上的同一
  • React JS:可折叠侧边栏

    我正在使用 React JS 创建响应式 UI 我想创建一个可折叠的侧边栏 如下所示 因此 当我单击垂直条 图形信息 时 它应该像第二张图片一样展开 我见过一些例子 比如Jsfiddle示例代码 https jsfiddle net 4q8
  • 每个内每个内每个

    我是新使用 JSON 和 getJSON 函数等 我正在尝试从 JSON 中获取数据 该 JSON 会下降几个级别并且可以有多个子级 目前 我可以通过将 each 与另一个 each 一起使用来查看我想要的值 例如 each data fu
  • 如何将网页从一个域重定向到另一个域?

    当第一个域 网页 加载时 如何将域重定向到另一个域 纯 HTML 替代方案如下HTML 中的标签 The 0这里是页面在重定向之前必须保持打开状态的秒数 在这种情况下 一旦您加载页面 它就会立即发生 与建议的 JS 解决方案相反 这在禁用
  • 从 Verdaccio 软件包版本历史记录中删除版本

    我使用取消发布版本npm unpublish
  • 与 Chrome 内容安全策略配合使用的 Javascript 模板引擎

    Chrome API 的清单版本 2 删除了执行不安全评估的功能 这意味着使用 eval 函数或通常从文本动态创建函数 看起来大多数 如果不是全部 Javascript 模板引擎都会这样做 我使用的是 Jaml 但我尝试了其他几个 如bac
  • HTML / Javascript - 通过单击父行来展开和折叠表行(子行)

    我几天来一直在尝试解决一个问题 终于明白 如 果没有帮助 我将不会成功 我想做一件我们每天在互联网上看到的常见事情 能够单击表格行以显示更多详细信息 但这里的更多细节并不意味着文本块 而是指与父行具有相同形状的子行 以下是 HTML 表格的
  • 通过 http 在两个 Node.js 服务器之间传输文件

    我有两个通过 http 相互通信的 node js express 服务器 server A它还与浏览器通信并可以处理文件上传请求 当文件上传到server A我想将其原样转移到server B以便进一步加工 最好的方法是什么 最好与请求
  • 为 div 标签设置属性

    我有一个简单的代码 div class content div 我想使用 javascript 回显 div 标签内的某些内容以显示这种方式 div class content div 我需要使用 javascript 因为如果屏幕宽于 9
  • VueJs 操作内联模板并重新初始化它

    这个问题类似于VueJS 在内联模板组件中重新编译 HTML https stackoverflow com questions 34087195 vuejs re compile html in an inline template co

随机推荐