定义变量的方法更好,为什么?

时间:2014-03-11 20:06:13

标签: javascript jquery

第一种方式:

var a = 0;

setTimeout(DoSomething(a), 1000);

function DoSomething(a) {
    a = $(window).width();
}

第二种方式:

setTimeout(DoSomething, 1000);

function DoSomething() {
    var a = $(window).width();
}

哪种方式更好?

3 个答案:

答案 0 :(得分:1)

您是否打算稍后再使用“a”作为参考?

在函数内部创建的变量仅存在于该函数中。一旦该功能完成,它就会被销毁。

function something(){
    var a = 1;
}

alert(a);
//This will trigger an alert box with nothing in it, or 'undefined'

在任何函数之外创建变量使其成为全局变量。全局变量可以由任何其他函数访问和设置。

var a;
function something(){
    a = 10;
}

alert(a);
//This will trigger an alert box with '10' being displayed

所以这实际上取决于你是否想再次使用该变量中设置的数据,或者它是否是“一次性”使用变量。

答案 1 :(得分:0)

Javascript是功能范围的,因此在第一种方式中,a是全局定义的,而在第二种方式中,它是在函数DoSomething的范围内定义的。另请注意,在第一种方法中,您未正确调用DoSomething。您不是在超时后调用它,而是立即调用它,并将其结果(在此示例中没有任何内容)作为函数参数输入到setTimeout。正如霍根在评论中所说,你需要setTimeout(function () { DoSomething(a); }, 1000);

通常,您应该避免在全局范围内定义变量,并尝试在函数中定义它们。您可以使用jQuery在文档准备就绪时执行此操作:

$(function() {
    var a;
    var DoSomething = function() {
        a = $(window).width();
    }
    setTimeout(DoSomething, 1000);
};

答案 2 :(得分:0)

两者都同样好,重要的是范围和背景。如果您需要变量a不仅仅是函数,第一个例子就可以了。如果您只希望a可用于该功能,而只需要该功能,则第二种方法是正确的。

您需要了解变量范围,以便更好地理解两种情况之间的差异。