var num = 1;
var isNumberEqualOne = function(){
if(num == 1){
return true;
}
return false;
}();
alert(isNumberEqualOne);
在这段代码中,函数中的语句返回true,返回true后,函数中的代码仍在执行吗?所以最后,代码遇到返回false,为什么函数仍然返回true.Sorry for my bad english.Thanks
答案 0 :(得分:7)
作为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
块除外)中没有其他语句执行”,更多关于{{1}块:
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
块中的代码1}}阻止总是运行。
偏离主题:另外,请注意,如果您要立即调用该函数表达式,则需要使用括号:
var isNumberEqualOne = (function(){
// ^--- here
if(num == 1){
return true;
}
return false;
})();
// ^--- and here
或者您可以将()
称为parens,如下所示:
var isNumberEqualOne = (function(){
// ^--- here
if(num == 1){
return true;
}
return false;
}());
// ^--- and here
要么有效。
答案 1 :(得分:6)
return
将暂停该功能并立即返回。函数中剩余的代码将不执行。
在您的示例中,num
被指定为1
,因此您的函数内的条件为true
。这意味着您的函数将返回到那里,然后使用true
。
您还可以重写该函数,使其正文为return (num == 1)
。
答案 2 :(得分:0)
当函数执行return语句时,它不会继续执行它后面出现的语句。因此,如果num == 1
评估为true
,则该函数将返回true
。
另请注意,您的警告语句未调用isNumberEqualOne
函数。如果要调用函数,则应该alert(isNumberEqualOne())
。