【问题标题】:how made a Return after conditional?有条件后如何退货?
【发布时间】:2018-01-17 00:50:50
【问题描述】:

为什么我们不能在 JS 中做到这一点?

估值 && 返回估值;

例子

function inGUI(x, y){ // check if is in gui
    for (var i = DEBUG.children.length;i--;){
        var gui = DEBUG.children[i];
        var check = isInside.call(gui,x,y);
        check && return check; // not work

    };
};

为什么我需要做一个 IF 条件

if(check){return check}

编辑: 非常感谢大家; @dave 的有趣方式:

function inGUI(x, y){ // check if is in gui
    var is_inside = false;
    for (var i = this.children.length; !is_inside; i--){
        var gui = this.children[i];
        is_inside = isInside.call(gui,x,y);
    };
    return is_inside;
};

太酷了

【问题讨论】:

  • not work 以什么方式? - 没关系,是的,这是无效的语法
  • 因为语言就是这样...... return 不能成为条件表达式的一部分,因为 return 语句没有可用的值以条件方式使用。
  • 我问为什么?我需要理解,语法是逻辑
  • 除了它是无效的之外,如果我不得不猜测,它不是在return 之后读取...换句话说,它读取为check && return .... 为什么?可能是因为它的语法无效。你不能在那里放一个 return 语句,所以它的行为不像预期的那样。
  • @PHPglue 它甚至不是有效的语法,所以它“不应该”运行(不幸的是 JS 是 JIT 编译的)。请参阅其他类似的问题:stackoverflow.com/questions/35231609/…

标签: javascript if-statement return conditional return-value


【解决方案1】:

因为javascript的语法不允许。

expr1 && expr2

&& 如果可以转换为 false,则返回 expr1;否则,返回 expr2。因此,当与布尔值一起使用时,如果两个操作数都为真,则 && 返回真;否则,返回 false。

return 不是表达式,因此不能用作expr1expr2

由于如果 expr1 可以转换为 false,它将“返回 expr2”,因此您本质上是在说 var x = return true,显然(我希望)这行不通 - (return 是一个语句,而不是一个表达式,所以不能这样使用)。

如果你想简化代码,你可以这样做:

function inGUI(x, y){ // check if is in gui
    var is_inside = false;
    for (var i = DEBUG.children.length; !is_inside; i--;){
        var gui = DEBUG.children[i];
        is_inside = isInside.call(gui,x,y);
    };
    return is_inside;
};

【讨论】:

  • 谢谢你,我现在明白了,好主意,我会试试的,我喜欢它
  • 我保留你的榜样我喜欢它,我发现它很干净。
  • 不过我更正了,您这边的键盘错误。删除最后一个文件;
【解决方案2】:

return 是语句而不是表达式。不同之处在于表达式计算的值可以在表达式上下文中使用。

如果return 是一个表达式,您可以这样使用它,但您也可以执行console.log(return 5);var x = return 1; 之类的操作。目前尚不清楚这些应该做什么,因为 return 也会停止执行函数的其余部分。 return 是一个语句更有意义,这意味着它不能用于需要值的地方,例如 && 运算符的操作数。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-10
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-17
    相关资源
    最近更新 更多