var i = somevalue 有什么区别;和变量 i;i = 某个值;

What are the differences between var i = somevalue; and var i; i = somevalue;

本文关键字:变量 区别 somevalue 什么 var      更新时间:2023-09-26

首先,如果之前有人问过这个问题,我深表歉意。我搜索了与我在这里要求的内容类似的东西,除了死胡同之外什么也没找到。

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

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

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

这促使我问:从性能方面、编码标准方面等方面,这两个声明之间有什么显着差异吗?

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

JSLint 实际上要求你将变量声明移动到函数范围的顶部:

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 中具有函数级范围。如果我在ifor循环中声明"j",它将被"提升"到函数的顶部,并且实际上存在于整个函数中,而不仅仅是在for循环中。

JSLint 提出这个建议是因为无论如何,这就是幕后发生的事情,如果你不期望是这种情况,你可能会感到粗鲁的惊喜。

考虑以下 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)
}

因此没有区别。

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++)

与否完全取决于你