Javascript,使用var关键字是最佳实践吗?

Javascript,使用var关键字是最佳实践吗?,javascript,Javascript,在我看来,无论何时声明变量,它都应该使用var关键字(除非它特别尝试访问全局变量)。特别是因为局部变量可以在其函数退出时收集。但是它对for循环这样的东西有什么影响吗 for(var i=0;i

在我看来,无论何时声明变量,它都应该使用var关键字(除非它特别尝试访问全局变量)。特别是因为局部变量可以在其函数退出时收集。但是它对for循环这样的东西有什么影响吗

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

一般来说,关于var关键字的使用是否有标准的最佳实践

一般来说,关于var关键字的使用是否有标准的最佳实践

有。也就是每次使用
var

但是它对for循环这样的东西有什么影响吗


javascript中还没有块作用域。所以这没有任何区别。与

var i; 
for(i = 0; i < 10; i++) {
  // you can access i inside
}  // as well as outside the loop
另外值得注意的是

首先,严格模式使得不可能意外地创建全局 变量。在普通JavaScript中,在赋值中错误键入变量 在全局对象上创建新属性并继续“工作” (尽管将来可能会失败:在现代JavaScript中很有可能)

这意味着,如果您省略
var
关键字,那么它被认为是一个意外错误,并且省略它可能在未来的ECMAScript(又称Javascript)迭代中不起作用


使用
var
,您就不会污染全局上下文,您的变量将是上下文感知的,并且对于未来的javascript版本是防故障的,或者用MDN的话来说,现代javascript在javascript中,
var
关键字看起来是可选的。这是不正确的

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

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

window.foobar = 'some text';
在for循环中声明变量与在其他任何地方声明变量相同


我怀疑您是否希望程序中的每个循环都试图同时使用
窗口。I
,如果您不使用
var
,就会发生这种情况

评论部分错误

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);
for(i=0;i<5;i++){}console.log(i);
对于(var j=0;j<5;j++){}console.log(j);
q=17
对于(var q=0;q<5;q++){}console.log(q);

所有3个输出
5
,但是如果使用
var
声明,我就不希望将来会使用for循环变量。

是的,最好始终使用
var
关键字!不这样做会创建一个全局变量,而人们通常不希望这样做,这也适用于
for
语句内部。始终使用
var
声明变量。使用“严格”模式,包括行
“使用严格”位于脚本块和/或命名空间包装函数的顶部,用于捕获无意中的分配,而无需
var
(以及拼写错误等)。“javascript中没有块作用域”-对于ES6不正确::)别忘了@brianvaughn,我没有添加它,因为它还不可用,不过谢谢你的指点。编辑以包含它。
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);