我可以根据javascript中的if / else语句更改变量值吗?
var $nextLink = $this.next().attr('href'),
$currentLink = $this.attr('href');
if ($currentLink == $nextLink){ // Check if next link is same as current link
var $nextLoad = $this.eq(2).attr('href'); // If so, get the next link after the next
}
else {var $nextLoad = $nextLink;}
答案 0 :(得分:5)
问题中显示的代码可行。但请注意,JavaScript没有块范围,只有函数范围。也就是说,在if
或else
语句的{}
块(或for
语句的{}
等)中声明的变量将在周围的函数中可见。在你的情况下,我认为这实际上是你想要的,但是大多数JS编码器可能会发现在if / else之前声明变量更简洁,然后用if / else设置它的值。
Neater仍然要使用?:
conditional (or ternary) operator:
var $nextLoad = $currentLink == $nextLink ? $this.eq(2).attr('href') : $nextLink;
答案 1 :(得分:1)
是的,虽然要注意JavaScript的变量提升和函数范围(if语句的{}代码块不是可变范围)。
澄清一下,您的代码相当于:
var $nextLink = $this.next().attr('href'),
$currentLink = $this.attr('href'),
$nextLoad;
if ($currentLink == $nextLink){ // Check if next link is same as current link
$nextLoad = $this.eq(2).attr('href'); // If so, get the next link after the next
}
else {$nextLoad = $nextLink;}
答案 2 :(得分:1)
是的,你可以这样做,但是javascript没有块范围,所以任何var声明都会被提升到函数级别,例如:
function foo() {
var x = 1;
if (x === 1) {
var y = 2;
}
console.log(y); // Can see y here, it's local to the fn, not the block
}
答案 3 :(得分:0)
是的,你可以,但jslint, The JavaScript Code Quality Tool,会要求你将所有var my_var;
移到一个地方......