关于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 else 语句?