如何避免重复返回假行

时间:2018-06-14 06:11:27

标签: javascript

在很多功能上我都有这一行:

if (!$('.postitle').hasClass('pmarked')) {return false;}

为了避免经常重复,我尝试了这个:

function falsea(){
    if (!$('.postitle').hasClass('pmarked')) {return false;}
}

然后调用上述内容 - falsea()而不是if (!$('.postitle')...

它不起作用。

是否有任何类似方法可以避免每次重复整行?

3 个答案:

答案 0 :(得分:4)

级别不正确。

return false实际上什么都不做,只是停止你的功能进一步运行。

如果您没有输出任何结果,这与简单地写return

相同

所以在你的falsea()函数中,你的返回false会停止函数,而不是外部函数,而是falsea()本身,它不会让母亲做任何事情。

你能做的是

function falsea(){
    return $('.postitle').hasClass('pmarked'))
}

在母亲那里,

if (!falsea()) return

答案 1 :(得分:4)

  

它不起作用。

它不起作用,因为这不是函数的工作方式(实际上是任何语言)。被调用方中的return语句不会导致调用方终止。简单的例子:

function foo() {
  console.log('before bar()');
  bar();
  console.log('after bar()');
}

function bar() {
  console.log('in bar; before return');
  return false;
  console.log('in bar; after return');
}

foo();

您可以做的是将条件放在自己的函数中以重用它,但是在每个调用者中仍然需要if语句:

function hasPmarked(){
  return $('.postitle').hasClass('pmarked');
}

// in caller

if (!hasPmarked()) {
  return false;
}
  

是否有任何类似方法可以避免每次重复整行?

您可以创建一个接受回调的函数,只有在检查成功时才执行回调。

例如:

function doStuffIfPMarked(stuff) {
  if ($('.postitle').hasClass('pmarked')) {
    stuff();
  }
}

然后来电者可以这样做:

doStuffIfPMarked(function() {
  // do something
});

即。如果你之前有这个:

function foo() {
  if (!$('.postitle').hasClass('pmarked')) {return false;}
  // do my stuff
}
你会写

function foo() {
  doStuffIfPMarked(function() {
    // do my stuff
  });
}

你仍然需要重复一些代码,但是你正在抽象出条件逻辑。

答案 2 :(得分:0)

您的函数只会返回false或undefined。 尝试在最后添加

return true;

甚至更简单,只需:

return !$('.postitle').hasClass('pmarked')

请记住,返回不会传播,因此您仍需要检查此函数的返回值并返回。

if (falsea()) {return false;}