在我看来,无论何时声明变量,它都应该使用var关键字(除非它专门尝试访问全局变量)。特别是因为当函数退出时可以收集局部变量。但是它在for循环中有什么不同吗?
for(var i = 0; i < ...; i++)
一般来说,有关使用var关键字的标准最佳做法吗?
答案 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循环变量用户。