我需要传递一个变量取决于if,我写了这段代码
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已定义)&amp; (var使用超出范围)
我不知道这是否意味着我的代码在所有浏览器和情境中都无法正常工作
上面编写此代码的正确方法是什么?
答案 0 :(得分:5)
在javascript中没有块范围的概念,所有变量都将在相应的函数范围/全局范围内声明。
在您的情况下,您在相同的功能范围内声明两次相同的变量,这就是警告的原因....即使您在页面底部声明了一个变量,其范围也将是整个页面因为Hoisting也this
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);
});