1

我需要传递一个变量取决于如果,我写了这段代码

var firstFoo  = 2;

$('div').click(function() {
    if(firstFoo == 1){
        var
            var1 = 'var1',
            var2 = 'var2',
            var3 = 'var3';
    }
    else{
        var
            var1 = 'no var1',
            var2 = 'no var2',
            var3 = 'no var3';
    }

    $('<span></span>',{
        'data-var1': var1,
        'data-var2': var2,
        'data-var3': var3
    }).insertAfter(this);
});

该代码工作正常,请参阅 jsfiddle http://jsfiddle.net/Xn7xG/上的示例

但是当我单击 JSHint 时出现错误

(var 已定义) & (var 使用超出范围)

在此处输入图像描述

而且我不知道这是否意味着我的代码在所有浏览器和情况下都无法正常工作

上面写这段代码的正确方法是什么?

4

1 回答 1

4

在 javascript 中没有块作用域的概念,所有变量都将在各自的函数作用域/全局作用域中声明。

在您的情况下,您在同一功能范围内两次声明相同的变量,这就是警告的原因....即使您在页面底部声明了一个变量,由于提升,它的范围将是整个页面也是

var firstFoo = 2;

$('div').click(function () {
    var var1, var2, var3;
    if (firstFoo == 1) {
        var1 = 'var1';
        var2 = 'var2';
        var3 = 'var3';
    } else {
        var1 = 'no var1';
        var2 = 'no var2';
        var3 = 'no var3';
    }

    $('<span></span>', {
        'data-var1': var1,
        'data-var2': var2,
        'data-var3': var3
    }).insertAfter(this);
});
于 2013-09-26T11:55:13.883 回答