【问题标题】:Javascript scope variable (global/local)Javascript 范围变量(全局/本地)
【发布时间】:2015-09-30 05:58:27
【问题描述】:

我想使用局部变量作为全局变量,有人告诉我这样做的方法是在函数外部创建变量,如下所示:

        var foo = null;

        function bar() {
            foo = 3;
        }

        console.log(foo);

但是 foo 记录的是 null,而不是 3。这是我能想到的最简单的示例,但主要是我希望能够在整个脚本中使用我在函数中创建的变量中的数据。

我做错了什么?


Ajax 请求中的相同问题:

var status = null;

.ajax({
  url: myUrl, 
  success: function (data) {
    status = data.status; //returns a string
    console.log(status); // it works, I get the string
  }, 
  dataType: 'jsonp' 
});

console.log(status); // still null

【问题讨论】:

  • 这很简单。只需要多想一点。如果您调用 bar() 函数,则 foo 值将被更新(null 为 3),否则它将显示为 null。
  • 嘿,谢谢你的回答,我的笨蛋看不出这么简单的事情。但是 Ajax 问题呢?
  • 状态值将为空,如果你在 ajax 调用之外得到它。如果你想跳出ajax,这意味着你想通过状态值来实现任何其他的东西,所以你是否必须调用@Get Off My Lawn 指定的函数,或者你也可以使用回调。在这两种情况下,它都会被调用。
  • 只需尝试一件事——假设 abc() 在单独的函数中添加 ajax 调用编码。在每个函数之外使用“var status = null”,就像全局一样。并在单独的函数假设 abc2() 中使用“console.log(status);”。当您想使用该状态值时,请调用该函数 abc2() 否则不要。我试过它在这里工作。希望对您有所帮助。

标签: javascript variables scope global local


【解决方案1】:

你需要先像这样调用函数。

    var foo = null;

    function bar() {
        foo = 3;
    }

    bar();
    console.log(foo);

最好的办法是调用一个函数,在 ajax 运行后记录数据。在这个例子中,我创建了一个名为 logit() 的函数,它在 ajax 请求状态下被调用。

var status = null;

$.ajax({
  url: myUrl, 
  success: function (data) {
    status = data.status; //returns a string
    console.log(status); // it works, I get the string
    logit();
  }, 
  dataType: 'jsonp' 
});

function logit(){
    console.log("logit(): " + status);
}

你得到 null 的原因是因为这是你的代码运行的顺序:

  1. status 设置为空
  2. 将 ajax 保存到内存中以在请求完成时运行,但实际上尚未运行
  3. 记录 status 仍然是 null 因为成功回调尚未运行
  4. ajax 请求终于完成并运行成功回调
  5. status 设置为 data.status

【讨论】:

  • 好吧,这是有道理的。如果我有一个成功的函数的 ajax 调用怎么办?然后我不能真正调用该函数,因为它在 ajax 请求运行时被调用。
  • 它应该以相同的方式工作,但您需要共享代码以获得更好的答案
  • 所以最好的做法是运行一个函数来保存所有数据?听起来不太实用,大型项目如何应对?
猜你喜欢
  • 2013-11-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-17
  • 2013-01-24
  • 2021-03-05
  • 2012-02-27
  • 1970-01-01
相关资源
最近更新 更多