无法更改函数内部的全局变量(JavaScript)

时间:2018-09-05 10:41:13

标签: javascript variables scopes

我有一个名为 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);

警报什么也不会返回,但是如果我将警报放在函数中,它将返回 response 。这似乎很容易,但我无法弄清楚。

该函数在所有这些代码之前被调用。

4 个答案:

答案 0 :(得分:1)

您需要在这里了解两件事:

  1. var resultwindow.result不同,因此请使用window.result = "Test";而不是var声明。
  2. 您需要在storeResponse()代码之前调用alert,以便它设置新值,然后在alert中获取该值。

window.result = "Test"; //in global scope
function storeResponse(response) {
    window.result = response;
    console.log(window);
}
storeResponse("Hello");
alert(result);

答案 1 :(得分:0)

您应该首先调用该函数,以便填充结果变量。

var result = []; //in global scope
function storeResponse(response) {
    window.result = response;
}
storeResponse('callSomething');
alert(result);

答案 2 :(得分:0)

您说您首先要调用该函数,所以您必须具有以下内容:

./instances/61df18f8-ff4b-4e27-afb2-e2e8aaffde1d/scripts/part-001
./instances/61df18f8-ff4b-4e27-afb2-e2e8aaffde1d/user-data.txt
./instances/61df18f8-ff4b-4e27-afb2-e2e8aaffde1d/user-data.txt.i
./instances/61df18f8-ff4b-4e27-afb2-e2e8aaffde1d/obj.pkl

问题如下:

  1. 在第一行中,您正在调用函数。该函数在全局范围内的窗口中设置新的storeResponse('someResponse'); var result = []; //in global scope function storeResponse(response) { window.result = response; } alert(result); 变量

  2. 在第二行中,您正在覆盖result var:result,它使您可以使用空数组,这就是警报看上去为空的原因

尝试注释第二行,它将起作用:

var result = [];

或更妙的是,先声明var:

storeResponse('someResponse');
//var result = []; //in global scope
function storeResponse(response) {
    window.result = response;
}

alert(result);

答案 3 :(得分:0)

那是因为AJAX是异步的。意味着代码是非阻塞的。 想象一下,在执行其余代码时,将AJAX调用传递给另一个线程进行处理。在AJAX请求收到响应之前触发警报。这就是为什么如果您在回调中执行警报的原因。