关于javascript函数中if语句的问题 - if语句返回true但函数返回false如何

Posted

技术标签:

【中文标题】关于javascript函数中if语句的问题 - if语句返回true但函数返回false如何【英文标题】:Question about if statement in function in javascript - how if the if statement return true but the function return false 【发布时间】:2011-05-31 06:14:49 【问题描述】:

我可以问你们一个问题吗? 以下是我的代码:

var num = 1;
var isNumberEqualOne = function()
    if(num == 1)
      return true;
    
    return false;
();
alert(isNumberEqualOne);

在这段代码中,函数中的语句返回true,返回true后,函数中的代码还在执行对吧?所以最后,代码遇到返回false,为什么函数仍然返回true。对不起我的英语不好。谢谢

【问题讨论】:

【参考方案1】:

作为alex said,return 函数立即将控制权转移到函数调用之外;函数中没有其他语句(finally 块除外)被执行。

所以:

function foo(a) 
    if (a == 1) 
        alert("a is 1");
        return;
        alert("This never happens, it's 'dead code'");
    
    alert("a is not 1");

foo(1); // alerts "a is 1" and nothing else
foo(2); // alerts "a is not 1"

关于我上面所说的“函数中没有其他语句(除了finally块)被执行”,更多关于finally块:

function foo(a) 
    try 
        if (a == 3) 
            throw "a is e";
        
        if (a == 1) 
            alert("a is 1");
            return;
            alert("This never happens, it's 'dead code'");
        
        alert("a is not 1");
    
    catch (e) 
        alert("exception: " + e);
    
    finally 
        alert("finally!");
    

foo(1); // alerts "a is 1", then "finally!"
foo(2); // alerts "a is not 1", then "finally!"
foo(3); // alerts "exception: a is 3", then "finally!"

请注意,无论执行如何离开try/catch块,要么自然地从底部掉出,要么因为return而提前,或者因为异常而提前,finally块中的代码总是运行。


题外话:另外,请注意,如果要立即调用该函数表达式,则需要在该函数表达式周围加上括号:

    var isNumberEqualOne = (function()
//                         ^--- here
        if(num == 1)
           return true;
        
        return false;
    )();
//   ^--- and here

或者您可以将调用它的 () 放在括号中,如下所示:

    var isNumberEqualOne = (function()
//                         ^--- here
        if(num == 1)
           return true;
        
        return false;
    ());
//     ^--- and here

两者都有效。

【讨论】:

顺便说一句,我昨天正在阅读一篇题为 闭包并不复杂javascript 博客文章。想象一下当我意识到你是作者时我的惊讶:P【参考方案2】:

return 将停止函数并立即返回。函数中剩余的代码体将被执行。

在您的示例中,num 被分配了1,因此您的函数内部的条件是true。这意味着您的函数将返回那里,然后返回 true

您也可以重写该函数,使其主体为return (num == 1)

【讨论】:

【参考方案3】:

当函数执行 return 语句时,它不会继续执行出现在它后面的语句。因此,如果num == 1 的计算结果为true,则该函数将返回true

另请注意,您的警报语句没有调用isNumberEqualOne 函数。如果你想调用函数,你应该做alert(isNumberEqualOne())

【讨论】:

“还要注意,您的警报语句没有调用 isNumberEqualOne 函数。”没有没有isNumberEqualOne 函数。这是一个布尔值。他在定义匿名函数后立即调用它并将其结果存储在isNumberEqualOne中。

以上是关于关于javascript函数中if语句的问题 - if语句返回true但函数返回false如何的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript:关于数组声明的 If 语句

JavaScript在if语句中等待异步函数[重复]

如何使用 JavaScript 中的三元运算符更改函数中的 if else 语句?

IF 语句中的 Javascript“NaN”[重复]

函数内部的JavaScript if语句以避免除以零NaN结果?

JavaScript 关于DOM的事件操作