我在一个主函数validate
中有很多函数,由于某种原因它不起作用。但是如果函数validate
包含单个函数它可以工作
function validate() {
return textcheck("txtname");
return numcheck("txtnum");
// textcheck and numcheck function are here
//doesn't work
}
function validate() {
return textcheck("txtname");// works fine
}
function validate() {
return numcheck("txtnum"); // works fine
}
为什么2在函数内返回不起作用
答案 0 :(得分:4)
return
退出函数,因此第一个return
之后的代码永远不会运行。
考虑以下功能:
function logs() {
console.log('I have been called');
return;
}
function doesNotLog() {
return;
console.log('I will not be called');
}
第一个函数会将消息记录到控制台,因为在console.log
之前调用了return
。
第二个函数没有,因为return
在调用console.log
之前退出函数。
如果您想要返回true
,如果 textcheck
和numcheck
都返回truthy value,则可以使用逻辑AND运算符{{ 1}}:
&&
如果您需要传递两个测试的 ,请使用OR运算符// Returns true if both checks pass
function validate() {
return textcheck("txtname") && numcheck("txtnum");
}
:
||
如果要返回每项检查的状态,可以返回一个对象:
// Returns true if either check passes
function validate() {
return textcheck("txtname") || numcheck("txtnum");
}
答案 1 :(得分:2)
return
在遇到此功能后退出该功能,因此永远无法访问您的第二个return
。
如果您的目标是返回真值*如果两个函数调用的 返回真值,则可以使用||
:
function validate() {
return textcheck("txtname") || numcheck("txtnum");
}
调用textcheck
,如果返回真值,则返回该值;如果textcheck
返回falsey值,则会调用numcheck
并返回其结果。
如果你想在两个函数的两个返回真值时返回一个真值,你可以使用&&
:
function validate() {
return textcheck("txtname") && numcheck("txtnum");
}
调用textcheck
,如果返回 falsey 值*,则返回该值;否则它会调用numcheck
并返回其结果。
我建议您完成一些基本的JavaScript教程。
*" truthy value"并且"虚假价值":JavaScript的&&
和||
运营商不会像他们一样导致true
或false
在许多其他语言中。相反,他们寻找" truthy"值(强制为true
)或" falsey"值(强制为false
的值)。假名值为0
,""
,NaN
,null
,undefined
,当然还有false
;真实的价值观是其他一切。
答案 2 :(得分:1)
返回功能终止他。 如果要验证两个(或更多)值,请使用一个return语句。
function validate() {
return textcheck("txtname") && numcheck("txtFname");
}
答案 3 :(得分:0)
如果您需要同时返回2个值,此解决方案可能会对您有所帮助。你只需要返回一个json对象
function validate() {
return {
txtname : textcheck("txtname"),
txtnum : numcheck("txtnum")
}
}
调用该函数后,您可以获得如下值:
var result = validate();
// result.txtname
// result.txtnum
答案 4 :(得分:0)
查看您的代码,我假设您希望validate()返回成功(true),如果textcheck()和numcheck()都成功。试试这个 -
function validate() {
return textcheck("txtname") &&
numcheck("txtnum");
}