当前位置: 首页 > 面试题库 >

JavaScript变量是在循环内部还是循环内部声明?

田硕
2023-03-14
问题内容

我相信在AS3中,您应该在循环外初始化所有变量,以提高性能。JavaScript也是如此吗?哪个更好/更快/最佳实践?

var value = 0;

for (var i = 0; i < 100; i++)
{
    value = somearray[i];
}

要么

for (var i = 0 ; i < 100; i++)
{
    var value = somearray[i];
}

问题答案:

绝对没有区别 意义还是性能,在JavaScript或ActionScript。

var是解析器的指令,而 不是
运行时执行的命令。如果var在函数体(*)中的任何位置一次或多次声明了特定的标识符,则该标识符在块中的所有使用将引用局部变量。value声明是var循环内部,循环外部还是同时声明这两者都没有区别。

因此,您应该写出最容易阅读的内容。我不同意Crockford的观点,将所有var放在函数顶部始终是最好的选择。对于在代码部分中临时使用变量的情况,最好var在该部分中进行声明,因此该部分可以独立存在并且可以复制粘贴。否则,在重构过程中将几行代码复制粘贴到新函数中,而无需分别挑选并移动关联的var,这会使您自己成为意外的全局对象。

特别是:

for (var i; i<100; i++)
    do something;

for (var i; i<100; i++)
    do something else;

Crockford将建议您删除第二个var(或同时删除vars和do var i;),而jslint会为此向您请教。但是IMO将两个都var保留在一起,将所有相关代码保持在一起,而不是在函数顶部保留一些容易忘记的额外代码,是更可维护的。

我个人倾向于将var变量声明为代码的独立部分中的第一个赋值,无论是否在同一函数的其他部分中单独使用了同一变量名。对我来说,var根本不需要声明是JS
wart(最好将变量默认设置为local)。我不认为我也有责任在JavaScript中复制ANSI C的旧版本的限制。

(*:除了嵌套函数体中)



 类似资料:
  • 问题内容: 以下代码段是否会降低性能? 还是这段代码实际上更有意义? 如果在字节码中这两个完全相等,那么显然第一种方法在样式方面看起来更好,但我想确保确实如此。 问题答案: 在当今的编译器中,没有。我在最小范围内声明对象,因为对于下一个家伙而言,它更具可读性。

  • 问题内容: 为什么以下工作正常? 但是据说这是危险的/不正确的: 是否需要在循环外声明变量? 问题答案: 局部变量的范围应始终尽可能小。 在你的例子我相信是不会使用的外while循环,否则你就不会问这个问题,因为它声明的内部while循环不会是一个选项,因为它不会编译。 所以,既然是不使用外循环,在尽可能小的范围是内 while循环。 所以,答案是着重那绝对应该被while循环内声明。没有,没有,

  • 问题内容: 我正在React中尝试做类似以下的事情(其中ObjectRow是一个单独的组件): 我意识到并理解为什么这是无效的,因为它映射到函数调用。但是,由于来自模板领域并且是的新手,所以我不确定如何实现上述目标(多次添加组件)。 问题答案: 就像您只是在调用JavaScript函数一样。您不能使用循环来调用函数的参数: 查看如何将函数作为参数传递给循环,这当然是语法错误。 但是您可以创建一个数

  • 我试图在for循环中获得for循环,因此输出如下: 我希望输出显示一个正方形 我不知道它为什么不这样做。下面是我的代码:

  • 问题内容: 我正在React中尝试执行以下操作(其中ObjectRow是一个单独的组件): 我意识到并理解为什么这是无效的,因为它映射到函数调用。但是,由于来自模板领域并且是的新手,所以我不确定如何实现上述目标(多次添加组件)。 问题答案: 就像您只是在调用JavaScript函数一样。您不能使用循环来调用函数的参数: 查看如何将函数作为参数传递给循环-导致语法错误。 但是您可以创建一个数组,然后

  • 问题内容: 我有一个整数数组。 我想为每个X创建一个沿Y迭代的线程。我不知道如何将适当的X值传递给每个线程。 本质上我希望能够做到 任何帮助,将不胜感激 问题答案: 只值可以的方法和本地匿名内部类内被捕获。您需要按以下方式更改代码: