当前位置: 首页 > 知识库问答 >
问题:

添加回调函数后,为什么我的变量在里面被修改了却不变?

充鑫鹏
2023-03-14

我知道这是异步性,但我已经遵循了添加回调函数的步骤,为什么我的变量在函数中修改后没有改变呢?-异步代码引用,但我只能访问回调函数内部的更改。这是我的代码片段。请帮忙

function callback(point) {

       for (i = 0; i < point.length; i++) {
           myDate[i] = point[i].date_time;
           myValue[i] = point[i].my_value;
       }

       for (j = 0; j < myDate.length; j++) {
           var temp = new Array(myDate[j], myValue[j]);
           mySeries[j] = temp;
       }
       alert("MYSERIES in scope:  " + mySeries); //defined

   }
   alert("MYSERIES out scope:  " + mySeries); // undefined
   getAllMessagesforChart(callback);

   function getAllMessagesforChart(callback) {
                var data = @Html.Raw(JsonConvert.SerializeObject(this.Model))


        $.ajax({
            url: '/messages/GetMessagesforChat',
            data: {
                id: data.id,
            },
            contentType: 'application/html ; charset:utf-8',
            type: 'GET',
            dataType: 'JSON'

        }).success(function (data) {
            callback(data);
        }).error(function (e) {
            alert("error " + e)
        })     

   }

共有2个答案

车嘉实
2023-03-14

在回调函数外部定义mySeries:

var mySeries = [];
function callback(point) { ... }

JavaScript在首次将数据放入时创建了mySeries。因此在调用回调之后,它将被全局定义

通博实
2023-03-14

我希望这能帮你把事情弄清楚--

这不是一个范围问题。这是执行语句的顺序问题。如果你在Amazon.com上点了东西,你会立即走到你的门廊并期望找到包裹吗?不,你得等无人机到那里。

mySeries变量是一个全局变量。它不是callback()函数之外的“超出范围”。并不是说您不能访问callback()函数之外的更改;这是因为您无法在更改发生之前访问这些更改。带有“MySeries out Scope”的警报出现在Callback()函数定义之后的代码中,但它是在Callback()函数执行之前执行的。

即使您要更改以下两条语句的顺序,警报仍将在回调函数之前执行,因为回调函数直到ajax调用同步返回才执行。

getAllMessagesforChart(callback);
alert("MYSERIES out scope:  " + mySeries); // undefined
 类似资料:
  • 问题内容: 我正在尝试了解Python的可变范围方法。在此示例中,为什么f()能够更改的值(x如在其中看到的)main(),但不能更改的值n? 输出: 问题答案: 一些答案在函数调用的上下文中包含单词“ copy”。我感到困惑。 Python不复制对象的函数调用中传递过。 功能参数是名称。调用函数时,Python会将这些参数绑定到您传递的任何对象上(通过调用方作用域中的名称)。 对象可以是可变的(

  • 问题内容: 给定以下示例,为什么在所有情况下都未定义? 为什么undefined在所有这些示例中都输出?我不需要解决方法,我想知道为什么会这样。 注意:这是JavaScript异步性的典型问题。随时改进此问题,并添加更多简化的示例,社区可以识别。 问题答案: 一句话回答:异步性。 问题的答案 让我们首先跟踪常见行为。在所有示例中,都在函数内部修改了。该函数显然不会立即执行,而是被分配或作为参数传递

  • 以下仅展示部分代码。 以下为CSS代码 以下为HTML代码 以下为js代码 这个是调整前 这个是调整后,虽然id改了,样式却没有变 希望可以在切换id的同时切换所述id的样式

  • 我不确定如何找到这个问题的答案,所以这里是我想要弄清楚的:我对javascript还是一个新手,所以请原谅任何复杂的逻辑和编码。我正在学习回调,但我想进一步让javascript生成一个动态语句,该语句将根据调用的函数而改变。例如: “这两个数:115加35=150.”,或 “这两个数:115减35=80.”,或 “这两个数:115乘以35=4025.”,或 “这两个数:115除以35=3.285

  • 问题内容: 我希望它不是重复的(同时鉴于存在此类错误的问题数量之多,但这是基本错误,同时也很难分辨),但我不明白这里会发生什么。 运行,没有错误(将字符转换为ASCII代码,它是内置的)。现在: 也可以运行,没有错误(不会被覆盖,条件始终为false)。现在: 我得到(在哪里) 看起来,即使不运行代码,仅引用左侧操作数也会使其成为局部变量。 显然,我可以解决此问题,但令我感到 非常 惊讶的是,由于

  • 问题内容: 我有一个想法,可能是因为我正在做一些样式设计来更改单选按钮,但是我不确定。我正在设置一个onClick事件,该事件两次调用了我的函数。我已删除它以确保它没有在其他地方被触发,并且onClick似乎是罪魁祸首。 我的功能目前仅是运输选项的简单控制台日志: 如果没有任何理由可以在这里看到为什么会发生这种情况,我可以发布其余代码,但是有很多方面,我认为这与之无关,但是我认为这是一个很好的起点