Javascript范围变量(全局/本地)

时间:2015-07-11 15:00:58

标签: javascript variables scope global local

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

        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

1 个答案:

答案 0 :(得分:3)

你需要先调用这个函数。

    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设为null
  2. 将ajax保存到内存中,以便在请求完成时运行,但实际上还没有运行
  3. 日志status仍然是null因为成功回调还没有运行
  4. ajax请求最终完成并运行成功回调
  5. status设置为data.status