[英]Running Javascript functions in order (one after the other)
当我尝试以下内容时:
if(myFunction() == "3") {
alert('its three!');
}
我的函数返回undefined,当我知道它实际上是返回3.这是因为javascript在函数返回值之前计算if语句吗?
如果是这样我怎么能做这样的事情:
var result = myFunction();
// Wait until result is there
if(result == "3") {
alert("its three!");
}
要解决您的问题,请尝试使用函数的返回值作为参数调用“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语句。 如果您首先将结果分配给变量,那么这可能是您错过该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!");
}
});
关于你在描述中做了什么,我有点不清楚。 试试看看你想要的是什么:
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!");
}
听起来是你的javascript代码在函数或它访问的元素之前调用函数(即DOM中的某些东西)已经完全加载,这就是函数调用返回undefined而不是'3'的原因。
防止这种情况的方法是推迟调用函数,直到DOM完成加载。
这通常通过在document.onload()
方法中调用函数来完成,该方法仅在页面加载完成时运行,或者使用jQuery的$.ready()
方法,该方法再次等待页面准备好跑。
希望有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.