当我尝试以下内容时:
if(myFunction() == "3") {
alert('its three!');
}
当我知道它实际上返回3时,我的函数返回undefined。 这是因为javascript在函数返回值之前计算if语句吗?
如果是这样,我怎么能这样做:
var result = myFunction();
// Wait until result is there
if(result == "3") {
alert("its three!");
}
答案 0 :(得分:2)
要解决您的问题,请尝试使用函数的返回值作为参数调用“alert”函数:
var result = myFunction();
// For debugging
alert(result);
if(result == "3") {
alert("its three!");
}
如果警告框的内容是“未定义”,则您的函数实际上并不返回值,只是将该不存在的结果分配给变量也无济于事。检查以确保myFunction看起来像:
function myFunction() {
// Perform calculations
var n = 10 - 7;
// Return result
return n;
}
JavaScript解释器既不需要函数也不返回值,也不需要返回语句。这意味着你应该仔细检查是否确实存在一个return语句。如果您首先将结果分配给变量,那么这可能是您错过该返回语句的一种方式。
如果您正在处理 Ajax请求, jQuery“模式对话框,”或类似结构,则函数甚至不可能以这种方式返回值(单击按钮或请求完成时,即)。要解决此问题,您的函数需要接受回调函数作为参数。然后完成后,它必须调用该函数,将“返回值”作为参数传递:
function myFunction(callback) {
// Start an AJAX request
var x = new XMLHttpRequest();
x.open('GET', '/domath.php?expression=10-7', true);
x.onreadystatechange = function() {
if(x.readyState == 4 && x.status == 200) {
// Call callback function, "returning" a value asynchronously
callback(x.responseText);
}
};
x.send();
}
然后你的主要代码是:
myFunction(function(result) {
// For debugging
alert(result);
if(result == "3") {
alert("its three!");
}
});
答案 1 :(得分:1)
关于你在描述中做了什么,我有点不清楚。试试看它是否符合您的要求:
function MyFunction(){
var result
// Do something here
//dummy:
result = 3;
return result;
}
var Testing = MyFunction();
alert(Testing);
if (Testing == 3) {
alert("Holy Cow! Its 3!");
}
答案 2 :(得分:1)
听起来是你的javascript代码在函数或它访问的元素之前调用函数(即DOM中的某些东西)已经完全加载,这就是为什么函数调用返回undefined而不是'3'
防止这种情况的方法是推迟调用函数,直到DOM完成加载。
这通常通过在document.onload()
方法中调用函数来完成,该方法仅在页面加载完成时运行,或者使用jQuery的$.ready()
方法,该方法再次等待页面为在跑步之前准备好了。
希望有所帮助。