Вопрос об операторе if в функции в javascript - как, если оператор if возвращает true, а функция возвращает false - PullRequest
4 голосов
/ 31 мая 2011

Могу я задать вам вопрос, ребята? Ниже мой код:

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

В этом коде оператор в функции возвращает true, после возврата true код в функции все еще выполняется правильно? Итак, в конце код встретил return false, так почему функция все еще возвращает true. Извините за мой плохой английский. Спасибо

Ответы [ 3 ]

7 голосов
/ 31 мая 2011

Как сказал alex , функция 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

Либо работает.

6 голосов
/ 31 мая 2011

return остановит функцию и немедленно вернется.Оставшаяся часть кода в функции будет не .

В вашем примере num назначено 1, поэтому условие внутри вашей функции - true.Это означает, что ваша функция будет тут же возвращаться с true.

. Вы также можете переписать эту функцию, чтобы ее тело было return (num == 1).

0 голосов
/ 31 мая 2011

Когда функция выполняет оператор возврата, она не будет продолжать выполнять операторы, которые появляются после нее.Таким образом, если num == 1 оценивается как true, то функция вернет true.

. Обратите также внимание, что ваш оператор оповещения не вызывает функцию isNumberEqualOne.Вы должны сделать alert(isNumberEqualOne()), если хотите, чтобы функция вызывалась.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...