在多个 for 循环中使用相同的变量名是不好的做法吗?

2024-05-08

我只是使用 JSHint 来检查一些 JavaScript 代码。在代码中,我有两个 for 循环,它们的用法如下:

for (var i = 0; i < somevalue; i++) { ... }

因此两个 for 循环都使用 var i 进行迭代。

现在 JSHint 向我显示第二个 for 循环的错误:“'i' 已定义”。我不能说这不是真的(因为显然是这样),但我一直认为这并不重要,因为 var i 仅在该特定位置使用。

以这种方式使用 for 循环是不好的做法吗?我应该为代码中的每个 for 循环使用不同的变量吗

//for-loop 1
for (var i = 0; ...; i++) { ... }

//for-loop 2
for (var j = 0; ...; j++) { ... }

或者这是我可以忽略的错误之一(因为它不会破坏我的代码,它仍然执行它应该执行的操作)?

JSLint 顺便说一句。在第一个 for 循环处停止验证,因为我没有在函数顶部定义 var i (这就是我首先切换到 JSHint 的原因)。所以根据这个问题中的例子:我应该使用 JSLint 还是 JSHint JavaScript 验证? https://stackoverflow.com/questions/6803305/should-i-use-jslint-or-jshint-javascript-validation/10763615#10763615– 无论如何我应该使用这样的 for 循环来确认 JSLint:

...
var i;
...
//for-loop 1
for (i = 0; ...; i++) { ... }
...
//for-loop 2
for (i = 0; ...; i++) { ... }

这对我来说也看起来不错,因为这样我应该避免 JSLint 和 JSHint 中的错误。但我不确定是否应该为每个 for 循环使用不同的变量,如下所示:

...
var i, j;
...
//for-loop 1
for (i = 0; ...; i++) { ... }
//for-loop 2
for (j = 0; ...; j++) { ... }

那么是否有最佳实践,或者我可以使用上面的任何代码,这意味着我选择“我的”最佳实践?


由于变量声明被提升到它们出现的范围的顶部,因此解释器将以相同的方式有效地解释两个版本。因此,JSHint 和 JSLint 建议将声明移出循环初始化程序。

下面的代码...

for (var i = 0; i < 10; i++) {}
for (var i = 5; i < 15; i++) {}

...有效地解释为:

var i;
for (i = 0; i < 10; i++) {}
for (i = 5; i < 15; i++) {}

请注意,实际上只有一个声明i,以及对其进行多次赋值 - 您实际上无法在同一范围内“重新声明”变量。

要真正回答你的问题...

有没有最佳实践,或者我可以使用上面的任何代码吗?

对于如何最好地处理这个问题有不同的意见。就我个人而言,我同意 JSLint 的观点,并且认为当您在每个作用域的顶部一起声明所有变量时,代码会更清晰。既然这就是代码的解释方式,为什么不编写看起来像其行为的代码呢?

但是,正如您所观察到的,无论采用哪种方法,代码都会起作用,因此这是一种样式/约定选择,您可以使用您觉得最舒服的任何形式。

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

在多个 for 循环中使用相同的变量名是不好的做法吗? 的相关文章

随机推荐

  • Swift - 如何从 OneSignal SDK 向特定用户名标签发送发布通知?

    如何从 Swift iOS Native SDK 向特定标签 例如 用户名 john 发送发布通知 我之前有过sendTag OneSignal 我正在向下面发送一个带有playerID 的用户 但这还不够 某人可以使用不同的帐户登录 所以
  • Linux下的C#,Process.Start()异常“没有这样的文件或目录”

    我在使用 Process 类调用程序来启动程序时遇到问题 可执行文件的层次结构位于 bin 目录下 而当前工作目录需要位于 lib 目录下 project bin a out this is what I need to call lib
  • Rails 3 中关联的标记装置已损坏

    升级到 Rails 3 后 引用其他标记的装置 用于关系 的装置将停止工作 夹具标签被解释为字符串 而不是查找具有该名称的实际夹具 Example Dog yml sparky name Sparky owner john Person y
  • 通过非 sf 列内连接两个 sf 对象

    我尝试使用内连接或左连接连接两个 sf 数据帧 这些数据框内部都有几何列 我不断收到错误 check join x y 中的错误 y 应该是一个数据框 对于空间连接 请使用 st joinFALSE 下面的可重现示例 df1 lt data
  • jConfirm 警报 - jQuery 插件

    Am jConfirm 用于用户确认 我的第一个 jConfirm 不会因用户操作而停止 而是传递到下一个 My Code function UpdateJobHandler click function var JobHander get
  • 使用cordova打开本地pdf文件

    我使用 cordova 3 3 0 我想打开本地 pdf 文件 然后根据用户需求关闭它 ref window open encodeURI path blank location yes ref addEventListener exit
  • 如何从序列化器字段订购 Django Rest Framework 查询集?

    我如何订购 DjangoQuerySet来自序列化器字段 由于字段太复杂 我无法订购QuerySet using annotate我也无法将值存储在模型中 Edit 串行器 class DrinkListModelSerializer se
  • XSLT,查找最后一个子节点是否是特定元素

    看下面两个例子
  • 带参数的 jQuery Ajax PUT

    看起来使用jQuery Ajax POST会传递参数 但是PUT会 不是 我查看了当前的 jQuery 代码 PUT 和 DELETE 不存在 我查看了 1 4 2 jQuery 其中有 PUT 和 DELETE 使用当前版本的 jQuer
  • android studio 和 android SDK 捆绑的 eclipse 版本有什么区别

    我没有 Android 开发经验 我想开始编写应用程序 The 官方开发者工具页面 http developer android com tools index html包含两个不同 IDE 的链接 第一个包含捆绑的 ADT 版本Eclip
  • 使用 python-shell 持续交换数据

    我需要从节点运行一些 python 脚本 由于我的 python 脚本使用复杂的结构 我认为如果只加载这些结构一次 然后使用这些结构运行一些特定的脚本 任务 会更好 在节点上 我想永远运行一个脚本 或者直到我说它可以终止 并继续向该脚本发送
  • Go 中数组的嵌套结构

    我已经开始使用https mholt github io json to go https mholt github io json to go 将 API JSON 转换为 go 结构 我真的很喜欢它 但是我对如何初始化如下所示的报告定义
  • C# JSON 反序列化:类型是接口或抽象类,无法实例化

    我正在使用这个 C 项目 它使用用于与在线交易平台 Poloniex 进行通信的 API https github com Jojatekok PoloniexApi Net 此代码应该获取钱包中的余额 var x await polo c
  • Bash 完成脚本在某些参数选项后完成文件路径

    我正在为命令行工具编写 bash 完成脚本 plink local cur prev opts COMPREPLY cur COMP WORDS COMP CWORD prev COMP WORDS COMP CWORD 1 opts 1
  • Scala 方法和高级类型参数

    我试图在 scala 中定义一个方法 它采用通用类型S lt Seq Double 并返回一个 S FixedLoad FixedLoad 是一个具体类型 但我的实现给了我错误 我不明白为什么 尽管我多次尝试去理解参数类型和高级类型 但我的
  • 将图像作为 JPanel 的背景

    我是 Java 新手 目前正在创建一个带有图形的游戏 我有这个课程从JFrame 在这个班级里 我有很多JPanel需要图像作为背景 据我所知 为了能够在 JPanel 中绘制图像 我需要一个从 JPanel 扩展的单独的类以及该类的pai
  • 如何将 RTF 文件转换为 pdf 文件?

    如何将 RTF 文件转换为 PDF 文件 我有 adobe PDF 打印机 我应该使用它吗 如果是这样 我如何以编程方式访问它 您可以使用 PDF 打印机 但仍有一些问题需要解决 为了处理跨多个页面的文本 您需要本文 http msdn m
  • MATLAB:比较两个不同长度的数组

    我有两个长度不同的数组 由于采样率不同 需要比较 我想对较大的数组进行下采样以匹配较小的数组的长度 但是该因子不是整数而是小数 举个例子 a 1 1 375 1 75 2 125 2 5 2 875 3 25 b 1 2 3 有什么方法可以
  • 如何在 PHP 中检查特定类型的对象

    我有一种方法 它接受 PDO 对象作为参数 允许用户使用现有连接 而不是打开新连接的方法 并节省资源 public static function databaseConnect pdo null 我知道is object 检查参数是否是一
  • 在多个 for 循环中使用相同的变量名是不好的做法吗?

    我只是使用 JSHint 来检查一些 JavaScript 代码 在代码中 我有两个 for 循环 它们的用法如下 for var i 0 i lt somevalue i 因此两个 for 循环都使用 var i 进行迭代 现在 JSHi