var i = somevalue之间有什么区别;和变种;我=某个值;

时间:2015-01-23 14:35:39

标签: javascript

首先,如果之前已经提出这个问题,我道歉。我已经搜索了类似于我在这里问的东西,除了死胡同之外什么都没找到。

我正在审查项目的一些旧代码,我使用Brackets作为带有JSLint扩展的IDE。在浏览我的代码时,建议我更改类似于

的行
for(var i = 0; i < somevalue; i++)

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

这促使我问;从性能方面,编码标准方面等两个声明之间是否存在任何显着差异?

感谢您的任何答案或线索!

3 个答案:

答案 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;在forit would have been 'hoisted' to the top of the functioni循环内部,并且实际上存在于整个函数中,而不仅仅是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++)

与否完全取决于你