首先,如果之前已经提出这个问题,我道歉。我已经搜索了类似于我在这里问的东西,除了死胡同之外什么都没找到。
我正在审查项目的一些旧代码,我使用Brackets作为带有JSLint扩展的IDE。在浏览我的代码时,建议我更改类似于
的行for(var i = 0; i < somevalue; i++)
到
var i;
for(i = 0; i < somevalue; i++)
这促使我问;从性能方面,编码标准方面等两个声明之间是否存在任何显着差异?
感谢您的任何答案或线索!
答案 0 :(得分:4)
JSLint是actually asking you to move the variable declaration to the top of the function scope:
function myfunction() {
var i,
j,
k;
// other code
for (i = 0; i < 100; i=i+1) { //another JSLint Recommendation: Don't use ++
for (j = 0; j < 100; j=j+1) {
for (k = 0; k < 100; k=k+1) {
console.log(i);
console.log(j);
console.log(k);
}
}
}
}
原因是变量在JavaScript中具有功能级别范围。如果我宣布了&#39; j&#39;在for
,it would have been 'hoisted' to the top of the function的i
循环内部,并且实际上存在于整个函数中,而不仅仅是for
循环。
JSLint提出这个建议,因为无论如何,幕后发生了什么,如果你不希望出现这种情况,你可能会有一个粗鲁的惊喜。
答案 1 :(得分:2)
考虑以下2个功能
function test1(){
//code block 1
for(var i = 0; i < somevalue; i++)
//code block 2
}
function test2(){
//code block 1
var i;
for(i = 0; i < somevalue; i++)
//code block 2
}
在这两种情况下,定义都会被提升,编译器首先定义变量。编译器重新排列这样的代码,
function test(){
var i; //and other definitions
//code block 1(without definitions)
for(i = 0; i < somevalue; i++)
//code block 2(without definitions)
}
因此没有区别......
答案 2 :(得分:0)
var i将变量i绑定到本地上下文。如果不执行var i,则全局定义变量。
你应该总是只在一个地方使用var,至少这是最好的做法。你也应该只使用一次变量
所以
for(var i = 0;i<10;i++)
很好,但
for(var i = 0;i<10;i++)
for(var i = 0;i<10;i++)
不是更好的
for(var i = 0;i<10;i++)
for(i = 0;i<10;i++)
但如果你这样做
var i;
for(i = 0;i<10;i++)
与否完全取决于你