我在2 functions
个文件上有.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);
}
当我从网页上调用generateID()
时,ID
会被记录,但false
未被记录(显然未使用的功能不完整)。但是,如果我将每个function
与我的网页分开调用,则ID
和false
都会被记录。我该如何解决或解决这个问题?任何评论都有帮助。
答案 0 :(得分:2)
逻辑和短路是因为第一次比较是错误的。第二个永远不会被评估,这就是为什么它没有记录。它没有被召唤。
答案 1 :(得分:1)
发生这种情况是因为id.length!=(ID_DIGITS + 1)中的第一个条件返回false,如果第一个条件返回false则不会调用下一个条件
示例强>:
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