0

具有以下代码:

function test(x) {
   if(x=='a') return false;
   return true;
}

if(y ==x) {
    return test('a');
    group['ids']= inputs.val();
    console.log(group);
}

为什么return true只是通过不继续超越来破坏我的代码return

注意:我希望return test()'s 的答案来控制它是否应该继续使用代码或不

更新

我已经做了类似的事情:

var response = test('b');
if (response==false) return false;
... more code here ...

但我想避免在每次调用该函数时都这样做

4

7 回答 7

3

因为这return几乎在所有编程语言中都是如此:它

  1. 退出函数并
  2. 返回一个值

如果您需要执行其他代码,请将其放在 return 语句之前。

编辑:我看到了你的编辑,但它并没有改变那个(和每个)上下文的本质return。它将继续停止当前范围的流动,返回最近的具有值的更高范围(在您的情况下,为真或假)。

于 2012-08-13T13:57:49.623 回答
3

return顾名思义,关键字将程序流控制返回给调用函数,并可选择设置函数的返回值。

这在每一种类 C 语言中都以相同的方式工作。

您可能想要做的是类似 Delphi 的方法,其中关键字的Result工作方式不同 - 它只是设置函数终止时将使用的返回值,但不会立即终止函数。

function() {
  var result = someDefaultValue;

  if (someCondition)
    result = otherValue;

  if (otherCondition)
    result = yetAnotherValue;

  return result;
}
于 2012-08-13T14:02:09.350 回答
1

尝试将 return 放在最后,因为 return true 会中断执行,之后什么都不会执行

于 2012-08-13T13:58:14.463 回答
1

return 关键字导致函数在解释器到达该关键字时结束('return'),并且在 return 语句之后(在同一函数中)不继续处理任何内容。

你可以重写你所拥有的:

group['ids']= inputs.val();
console.log(group);
return true;
于 2012-08-13T13:58:18.030 回答
1

当 return 语句执行时,当前函数的执行结束,程序的控制权返回到调用函数的上下文。return 语句之后的任何内容都不会被执行。

于 2012-08-13T13:58:38.923 回答
0

我通常会找出哪些场景是坏的/错误return false;的,然后继续寻找正确的代码。

function Testmcdooder (test) {
    if (test === false) {
        // just exit up here
        return false;            
    }

    // now all of this code will run only if we're fine
    group['ids']= inputs.val();
    console.log(group);
}
于 2012-08-13T13:59:16.430 回答
0

return语句存在于函数中。我认为你宁愿想要一个if声明:

if (y == x) {
  if (test('a')) {
    group['ids']= inputs.val();
    console.log(group);
  }
}

如果您还想在确定其他语句是否应该运行后返回该值:

if (y == x) {
  if (test('a')) {
    group['ids']= inputs.val();
    console.log(group);
    return true;
  } else {
    return false;
  }
}

或者:

if (y == x) {
  var cond = test('a');
  if (cond) {
    group['ids']= inputs.val();
    console.log(group);
  }
  return cond;
}
于 2012-08-13T14:07:54.843 回答