Javascript,使用var关键字是最佳做法吗?

时间:2015-04-18 15:52:54

标签: javascript

在我看来,无论何时声明变量,它都应该使用var关键字(除非它专门尝试访问全局变量)。特别是因为当函数退出时可以收集局部变量。但是它在for循环中有什么不同吗?

for(var i = 0; i < ...; i++)

一般来说,有关使用var关键字的标准最佳做法吗?

3 个答案:

答案 0 :(得分:2)

  

一般来说,有关使用var关键字的标准最佳做法吗?

是的。这就是每次都使用var

  

但是它在for循环中有什么不同吗?

javascript 中没有块范围。所以它没有任何区别。它与

相同
var i; 
for(i = 0; i < 10; i++) {
  // you can access i inside
}  // as well as outside the loop

var中使用时,声明没有'use strict'关键字的变量会引发错误。因此,使用var关键字总是更好,如果您希望它是全局的,可以通过将属性附加到window来避免歧义。

忘记了let关键字,它将在ES6中出现,它允许一个块范围。所以它可以写成

for(let i = 0; i < 10; i++){
   // i can be accessed here but not outside this block
}

另外值得注意的是

  

MDN:首先,严格模式使得无意中无法创建全局   变量。在正常的JavaScript中错误输入赋值中的变量   在全局对象上创建一个新属性并继续工作&#34;   (虽然未来可能会失败:很可能,在现代JavaScript 中)

这意味着,如果省略var关键字并忽略它,那么它被视为意外错误可能无法在ECMAScript即Javascript的未来迭代中起作用

使用var并且您不会污染全局上下文,您的变量将具有上下文感知功能,并且可以针对未来版本的javascript进行故障排除,或者使用MDN的话,现代JavaScript

答案 1 :(得分:1)

在Javascript中,var关键字显示为是可选的。这是不正确的。

使用var,在当前范围内创建变量。没有它,变量将附加到全局范围。 (这是浏览器中的window

您应该尽可能绝对使用var。如果您故意将变量附加到窗口,请直接说明:

window.foobar = 'some text';

在for循环中声明变量与在其他地方声明变量相同。

我怀疑你希望你的程序中的每个循环都试图同时使用window.i,如果你不使用var会发生这种情况。

答案 2 :(得分:0)

评论部分错误。

只有函数在javascript中具有范围,因此for循环var没有实际的功能差异。在for循环中使用var会产生语义含义,但不应在以后使用该值。

for(i = 0; i < 5; i++){}console.log(i);
for(var j = 0; j < 5; j++){}console.log(j);
q = 17
for(var q = 0; q < 5; q++){}console.log(q);

所有3个输出5但带有var声明我不希望将来的for循环变量用户。