Saya memiliki 2 functions pada satu file .js.

function notUsed(id) {
        //default to false because if true then id not being used and good for new user
        var notInUse = false;

        console.log(notInUse);
        return !notInUse;   
    }

function generateID() {

        //number of zeros represents the number of digits in id code
        const SIZEOFID = 10000000;
        const ID_DIGITS = 7;
        //letter to start id for non los rios people
        const STRTOFID = "C";
        //variable to hold finished id code & variable to hold 7 digit of id code
        var id, idNum;

        //loop to make sure id contains 7 digits and 1 letter and not used already
        do {
            idNum = Math.round(Math.random() * SIZEOFID);
            idNum.toString();
            id = (STRTOFID + idNum);
        }while(id.length != (ID_DIGITS+1) && notUsed(id));
        console.log(id);
    }

Ketika saya memanggil generateID() dari halaman web saya, ID dicatat tetapi false tidak dicatat (Jelas fungsi notUsed tidak lengkap). Namun, jika saya memanggil setiap function secara terpisah dari halaman web saya, baik ID dan false akan dicatat. Bagaimana saya bisa memperbaiki atau mengatasi masalah ini? Setiap komentar membantu.

0
Nick Pavini 17 Agustus 2017, 17:49

2 jawaban

Jawaban Terbaik

Logika dan hubungan arus pendek karena perbandingan pertama salah. Yang kedua tidak pernah dievaluasi, itulah sebabnya ia tidak masuk. Itu tidak dipanggil.

2
John Halbert 17 Agustus 2017, 14:53

Hal ini terjadi karena kondisi pertama pada while id.length != (ID_DIGITS+1) menghasilkan false, jika kondisi pertama menghasilkan false, kondisi selanjutnya tidak akan dipanggil

Contoh:

function imreturnTrue() {
  console.log('imreturnTrue');
  return true
};

function impreturnFalse() {
   console.log('impreturnFalse');
   return false
};

function imreturnTrue1() {
    console.log('imreturnTrue1');
    return true
};
let example = imreturnTrue() && impreturnFalse() && imreturnTrue1();
// imreturnTrue impreturnFalse

let example1 = imreturnTrue() && imreturnTrue1() && impreturnFalse() ; 
// imreturnTrue imreturnTrue1 impreturnFalse

let example2 = impreturnFalse() && imreturnTrue() && imreturnTrue1() ; 
// impreturnFalse
1
Dmitrii 17 Agustus 2017, 15:07