0

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

4 回答 4

5

问题中显示的代码将起作用。但是请注意,JavaScript 没有块作用域,只有函数作用域。也就是说,在iforelse语句的{}块(或for语句的{}等)中声明的变量将在周围的函数中可见。在你的情况下,我认为这实际上是你想要的,但大多数 JS 编码人员可能会发现在 if/else 之前声明变量然后用 if/else 设置它的值更简洁。

?:更整洁的方法是使用条件(或三元)运算符在一行中完成:

var $nextLoad = $currentLink == $nextLink ? $this.eq(2).attr('href') : $nextLink;
于 2013-08-10T03:47:06.863 回答
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;}
于 2013-08-10T03:35:49.867 回答
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
}
于 2013-08-10T03:36:19.730 回答
0

是的,您可以,但是JavaScript 代码质量工具 jslint会要求您将所有内容var my_var;集中到一个地方...

于 2013-08-10T03:39:00.640 回答