Javascript作用域变量(全局/局部)

Javascript作用域变量(全局/局部),javascript,variables,scope,global,local,Javascript,Variables,Scope,Global,Local,我想使用局部变量作为全局变量,我被告知这样做的方法是在函数外部创建变量,如下所示: var foo = null; function bar() { foo = 3; } console.log(foo); 但是,foo日志为null,而不是3。这是我能想到的最简单的例子,但我主要希望能够在整个脚本中使用我在函数中创建的变量中的数据 我做错了什么 Ajax请求中的相同问题: var status =

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

        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

您需要像这样首先调用函数

    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的原因是,代码的运行顺序如下:

  • 状态设置为空
  • 将ajax保存到内存中,以便在请求完成时运行—实际上还没有运行
  • 记录
    状态
    ,该状态仍然为
    null
    ,因为成功回调尚未运行
  • ajax请求最终完成并运行成功回调
  • 状态
    设置为
    数据。状态

  • 好吧,这是有道理的。如果我有一个ajax调用,其中包含一个函数success呢?那么我就不能真正调用这个函数了,因为它是在ajax请求运行时被调用的。它的工作原理应该是一样的,您需要共享代码以获得更好的答案,所以最好的做法是运行一个函数来保存所有的数据?这听起来不太实际,大型项目如何应对?很简单。只是需要多想想。如果你调用bar()函数,那么foo值将被更新(null为3),否则它将显示null。嘿,谢谢你的回答,我愚蠢的头脑看不到这么简单的事情。但是Ajax问题呢?如果您在Ajax调用之外获得状态值,那么状态值将为null。如果您想跳出ajax,这意味着您想通过状态值实现任何其他东西,所以您是必须调用@get Off My Lawn指定的函数,还是也可以使用回调函数。在这两种情况下,每次都会调用它。在每个函数外部使用“var status=null”,就像全局使用一样。并在单独的函数abc2()中使用“console.log(status);”。当您想使用该状态值时,请调用该函数abc2(),否则不要调用。我试过了,它在这里起作用了。我希望,这会对你有所帮助。