如何在变量确定之前初始化变量?

时间:2014-05-09 19:32:53

标签: javascript

我有一个基本的for循环,我确定了一个名为'left'的变量的值'right'animationDirection

如何在循环之前初始化此变量,以便可以在其中定义?

我尝试使用undefined将其初始化为var animationDirection = undefined;,但javascript linter不赞成这种做法。

我已经确定了下面的代码,它在循环逻辑中定义了animationDirection,但这似乎是一个坏主意,因为我用var初始化变量两次。

关于如何更好地定义变量的任何想法?

for (var i = 0; i < $selected.length; i++) {

    if (i < ($selected.length / 2)) {
        var animationDirection = 'left';
    } else {
        animationDirection = 'right';
    }

    $($selected[i])
        .css(animationDirection, animationOffset)
        .velocity(animation, animationConfig);
}

2 个答案:

答案 0 :(得分:1)

像这样:

var animationDirection,
    i;

for (i = 0; i < $selected.length; i += 1) {

    if (i < ($selected.length / 2)) {
        animationDirection = 'left';
    } else {
        animationDirection = 'right';
    }

    $($selected[i])
        .css(animationDirection, animationOffset)
        .velocity(animation, animationConfig);
}

Douglas Crockford的JSLint要求变量在函数的顶部声明(不确定你使用的是什么lint)。

这是一个更简洁的方法,它避免了for - 循环语义(假设这里$selected是一个jQuery对象)并且使得变量声明的位置更加简单:

$selected.each(function(i, e) {
    var animationDirection = (i < ($selected.length / 2)) ? "left" : "right";
    $(e).css(animationDirection, animationOffset)
        .velocity(animation, animationConfig);
});

答案 1 :(得分:0)

怎么样?

for (var i = 0; i < $selected.length; i++) {
    $($selected[i])
        .css(i < ($selected.length / 2) ? 'left': 'right' , animationOffset)
        .velocity(animation, animationConfig);
}