Трудность возврата переменной через функцию - PullRequest
0 голосов
/ 07 мая 2011

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

var emailExists = false;
var userExists = false;

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

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

Ответы [ 3 ]

1 голос
/ 07 мая 2011

У вас есть 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);
0 голосов
/ 07 мая 2011

Короче ... все.

Я так понимаю, вы новичок в 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);
0 голосов
/ 07 мая 2011
var emailExists = false;
var userExists = false;

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

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

...