Javascript变量范围(?)

标签 javascript scope

我的老板指派我在我们正在开发的网站的几个页面中添加一些 Javascript。我是一个彻头彻尾的 Javascript 菜鸟(我本质上是一个 PHP 编码员),但是我已经学习和使用 Javascript 两天了,直到现在,一切都进行得很顺利。

现在我遇到了一个问题。我认为它与变量作用域有关,我认为我理解变量作用域,但我正在为这个非常(可能)非常简单的任务而苦苦挣扎。如果我有更多的时间来学习如何使用 JS,我会在来找你们之前再多花些功夫,但我需要在下周一之前找到一些可行的东西。我很接近..

代码在下面,解释在下面。

var activeTopic;
$.post("test.php",
    {
        request:"getActiveSection",
        courseid:courseid
    },
    function (data, status) {
        if (data != "none") {
            activeTopic = data;
            displayActiveTopic();
        }
    });
alert(activeTopic);

我正在使用 Jquery 的 POST 函数调用 test.php。 PHP 获取类(class) ID 并返回当前事件的主题。 PHP 代码返回正确的值。我知道这一点,因为如果我提醒(数据);,则会显示正确的值。

但是,如果我 alert(activeTopic);在函数之外,我注意到全局变量 activeTopic 没有改变。为什么?

在此先感谢您的帮助。有空的时候,我会花更多的精力去学习 JS。到目前为止,它很有趣……与 PHP 非常不同,但仍然很有趣。

最佳答案

这与范围无关,而与时间有关。

  1. 您声明一个变量 activeTopic
  2. 您发送一个 HTTP(post)请求
  3. 您提醒 activeTopic

稍后,HTTP 响应 到达时,一个值被分配给 activeTopic

您需要处理当前为 activeTopic 赋值的回调函数内部的数据。

关于Javascript变量范围(?),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14629897/

相关文章:

javascript - 如何从页面源代码中使用正则表达式获取<script>代码?

javascript - 所有回调同时执行,但为什么呢?

javascript - 如何使用脚本中的引用压缩 YAML 文件?

javascript - 当部分 View 中的ajax调用完成时,如何在主机MVC页面上调用javascript?

python - Lambda 函数和变量作用域

Lua 表从 API 到主程序不可见

javascript - 在 Webkit 和 Edge(jQuery 和 vanillaJS)上滚动时出现抖动/闪烁的背景图像

nhibernate - Quartz.NET, NH ISession & Ninject Scope

javascript - let in for 循环是如何工作的?

javascript - Ionic - 没有在工厂内的 $ionicPopup.show 中返回值 $scope