[英]Can't change global variable inside function (JavaScript)
我有一個名為result和function的全局變量,目的是更改result的值。 這是我試過的代碼:
checkdate();
function checkdate() {
//defining startdate,enddate,hotel_id
$.ajax({
method: 'GET',
url: '/checkdate',
data: {startdate : startdate, enddate : enddate, checkroom : 1, hotel_id : hotel_id},
success: function(response){
storeResponse(response);
}
});
}
var result = [];
function storeResponse(response) {
window.result = response;
}
alert(result);
警報不返回任何內容,但是如果我將警報INSIDE放在函數中,它會返回響應 。 這似乎很容易,但我無法弄清楚。
在所有這些代碼之前調用該函數。
這里有兩件事你需要知道:
var result
與window.result
所以使用window.result = "Test";
而不是var
聲明。 alert
代碼之前調用storeResponse()
,以便它設置新值,然后在alert
獲取該值。 window.result = "Test"; //in global scope function storeResponse(response) { window.result = response; console.log(window); } storeResponse("Hello"); alert(result);
您應該首先調用該函數,以便填充結果變量。
var result = []; //in global scope
function storeResponse(response) {
window.result = response;
}
storeResponse('callSomething');
alert(result);
你說你先調用這個函數,所以你必須有這樣的東西:
storeResponse('someResponse');
var result = []; //in global scope
function storeResponse(response) {
window.result = response;
}
alert(result);
問題如下:
在第一行,您正在調用您的函數。 該函數在窗口全局范圍中設置新result
var
在第二行中,您將覆蓋result
var: var result = [];
它允許您使用空數組,這就是警報看起來為空的原因
嘗試評論第二行,它將工作:
storeResponse('someResponse');
//var result = []; //in global scope
function storeResponse(response) {
window.result = response;
}
alert(result);
或者甚至更好,首先聲明var:
var result = []; storeResponse('someResponse'); function storeResponse(response) { result = response; // You don't need to use window (if the var is not declared inside the function, is global by default) } alert(result);
那是因為AJAX是異步的。 這意味着代碼是非阻塞的。 想象一下,當執行其余代碼時,AJAX調用被傳遞給另一個線程進行處理。 在AJAX請求收到響應之前觸發警報。 這就是為什么如果你在回調中做警報它的工作原理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.