【问题标题】:Why is it considered best practice?为什么它被认为是最佳实践?
【发布时间】:2020-03-20 15:58:57
【问题描述】:

我在网站w3schools.com(JavaScript 最佳实践)上看到了这段代码

// Declare at the beginning
var i;

// Use later
for (i = 0; i < 5; i++) {

我不明白为什么声明这个变量被认为是好的做法。只有循环才需要它。为什么要让它全球化

【问题讨论】:

  • 其实不是。您也应该避免使用全局变量和 w3schools(双关语)。使用 MDN 获得更好的解释和更新参考
  • 无论如何它都是全局的(var 不会创建块作用域)。这实际上是(或曾经是) var 声明的建议,最好在其作用域的开头声明(不一定是全局的),因为无论如何都会提升声明,而后面的声明将被忽略。
  • w3schools 已经改进了,但是很长一段时间它显示的信息非常错误。我不会相信 w3schools 的最佳实践。至少在这种情况下使用let 而不是var
  • 可以,不过可以换成let
  • 如果您正在寻找有关 javascript 的任何最佳实践,请使用 MDN

标签: javascript scope cycle


【解决方案1】:

实际上,这段代码已经过时了。最佳做法是使用let 而不是var (see this question on StackOverflow,并在for 语句中声明:

for (let i = 0; i < 5; i++) {
    console.log(i); // 0, 1, 2, 3, 4
}
console.log(i); // undefined variable i

let 定义了一个块范围的变量。这个变量不会“冒泡”到全局范围,通过不污染全局范围来提高效率。

【讨论】:

    【解决方案2】:

    根据w3schools.com

    将所有声明放在顶部是一种很好的编码习惯 每个脚本或函数。

    这将:

    提供更简洁的代码 提供一个查找局部变量的地方 更容易避免不需要的(隐含的)全局变量 减少不必要的重新声明的可能性

    您可以这样做以使代码更简洁。 但我建议使用let 而不是var

    【讨论】:

    • 我们看到 w3schools 再次引人注目。变量不能在其范围内重新声明。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-11
    • 2011-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多