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