变量是否可以从if else语句生成?

时间:2013-08-10 03:31:04

标签: javascript jquery

我可以根据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;}

4 个答案:

答案 0 :(得分:5)

问题中显示的代码可行。但请注意,JavaScript没有块范围,只有函数范围。也就是说,在ifelse语句的{}块(或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;移到一个地方......