【问题标题】:What's way to define variable is better and why?定义变量的方法更好,为什么?
【发布时间】:2014-03-11 20:06:12
【问题描述】:

第一种方式:

var a = 0;

setTimeout(DoSomething(a), 1000);

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

第二种方式:

setTimeout(DoSomething, 1000);

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

什么方法比较好?

【问题讨论】:

  • 这不是好坏的问题,它们在做不同的事情。范围不同。
  • 第一个根本不起作用。发生超时时,您没有调用该函数,而是立即调用它。
  • 忽略其他问题,通常“更好”地声明具有最小范围的变量来解决任务。
  • 我相信您想要以下第一个:setTimeout(function () { DoSomething(a); }, 1000);

标签: javascript jquery


【解决方案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

因此,这实际上取决于您是否要再次重用在该变量中设置的数据,或者它是否是“一次性”使用变量。

【讨论】:

    【解决方案2】:

    Javascript 是功能范围的,所以在第一种方式中,a 是全局定义的,而在第二种方式中,它是在函数 DoSomething 的范围内定义的。另请注意,在第一种方法中,您错误地调用了DoSomething。不是在超时后调用它,而是立即调用它,并将其结果(在本例中没有)作为函数参数输入传递给 setTimeout。正如霍根在 cmets 中所说,你会想要setTimeout(function () { DoSomething(a); }, 1000);

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

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

    【讨论】:

      【解决方案3】:

      两者都一样好,重要的是范围和上下文。如果您需要变量a 不仅可以访问函数,那么第一个示例就可以了。如果您只希望 a 可用于该函数并且只有该函数,则第二种方法是正确的。

      您需要了解变量作用域才能更好地理解这两种情况的区别。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-28
        • 1970-01-01
        • 1970-01-01
        • 2013-06-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多