[英]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.