Сложность возврата переменной с помощью функции

#javascript #function #variables #boolean #return

#javascript #функция #переменные #логическое #Возврат

Вопрос:

Я пытаюсь возвращать переменные как true или false с помощью функции. Я хочу сделать это таким образом, чтобы я мог вызвать ajax только один раз и получить обе переменные обратно в одной функции. Однако у меня возникли проблемы с возвратом переменной. Вот мой код:

 var emailExists = false;
var userExists = false;

function checkExisting(emailExists,userExists) {
    var emailExists = true;
return emailExists;
}
alert(emailExists);
  

Чего я не могу понять, так это почему предупреждение выдает мне false, когда я думал, что оно выдаст мне true. Что не так с этой настройкой?

Ответ №1:

У вас есть 3 версии переменной «emailExists»: глобальная, параметр для checkExisting() и локальная в checkExisting()! Избавьтесь от всех, кроме первой. Кроме того, вы никогда не вызываете checkExisting() .

 var emailExists = false;

function checkExisting() {
    emailExists = true;
}
checkExisting();
alert(emailExists);
  

или

 var emailExists = false;

function checkExisting() {
    return true;
}
emailExists = checkExisting();
alert(emailExists);
  

Комментарии:

1. Потрясающе! Это именно то, что мне было нужно. Большое вам спасибо, я буду использовать это.

Ответ №2:

 var emailExists = false;
var userExists = false;

function checkExisting(emailExists,userExists) {
    emailExists = true;
return emailExists;
}
checkExisting(false,true); //FOR EXAMPLE !
alert(emailExists);
  

Вы должны вызвать функцию checkExisting, и не нужно использовать из var в тело функции, потому что это определено на странице .

Комментарии:

1. Спасибо за ответ! Это работает нормально, однако я хотел бы использовать проверку ajax внутри функции, чтобы определить, являются ли эти функции истинными или нет. Использование этой системы при вызове функции не проверяет это. Вот почему я сделал, чтобы это стало true в функции, но в этом и проблема. Есть идеи, как это сделать таким образом?

Ответ №3:

Короче говоря … все.

Я так понимаю, вы новичок в javascript и программировании? Вам нужно много читать, чтобы понять область видимости объекта и как работает javascript. Я дам вам краткий обзор того, что вы написали, чтобы вы могли, надеюсь, чему-то научиться.

 // Here you're declared two objects. 'emailExists' and 'userExists'.
// These Boolean objects, since they are not wrapped in a closure are now global
// (you can reference them anywhere) in your script.   
var emailExists = false;
var userExists = false;


// This function never gets called. If it did, it would always return true 
// since you have created a new 'emailExists' Boolean object in your function 
// and would return that each time.
function checkExisting(emailExists,userExists) {
    // This whilst only available within the function closure, is a no, no.
    // You're just confusing things by creating objects with the same name 
    // as global ones.
    var emailExists = true;

    // I'm returning true.
    return emailExists;
}

// Here you are returning your first declared Boolean (the one at the top)
// this will always return false.
alert(emailExists);
  

Комментарии:

1. Хорошо, я понимаю. На самом деле у меня есть функция, вызванная непосредственно перед этим, хотя я ее не включал. Но большое вам спасибо, я ценю это!