Variable name definition in front of for in loop
本问题已经有最佳答案,请猛点这里访问。
给出来自Javascript的代码段好的部分(第24页):
1 2 3 4 5 6 | var name; for (name in another_stooge) { if (typeof another_stooge[name] !== 'function') { document.writeln(name +":" + another_stooge[name]); } } |
为什么在
这里有两个不同的注意事项。
VAR
如果没有
在循环之前
你可能有
Douglas Crockford(The Good Parts的作者,在这里非常相关)主张在函数顶部声明所有局部变量,这样你就有了一个地方可以找到你的范围。
是的,但在这种情况下,名称将是一个全局变量,并且行为会有所不同。因此,如果你在好的部分之后使用var,那么你使用的每个变量(全局变量都不好)。
但你可以像这样缩短代码......
1 | for (var name in another_stooge) { |
这将使名称成为范围变量......
建议函数的所有变量都在同一个地方定义,所以如果你有多个变量,那么循环中的那个变量将在它们之间定义:
1 2 3 4 5 6 | var a, b, name; //etc for (name in another_stooge) { if (typeof another_stooge[name] !== 'function') { document.writeln(name +":" + another_stooge[name]); } } |
这与"最佳实践"部分有关。
1 2 | var name = 1; name = 1; |
这两个是不同的东西。对于第一行,
编辑:假设你问为什么不
1 | for (var name in another_stooge) |
风格问题。
与许多其他语言不同,JavaScript是函数作用域,而不是作用域限制。
结果,许多程序员将手动"提升"他们的
或者 - 考虑到在该代码中使用