在回调/闭包中设置范围变量的值

时间:2013-02-06 13:58:30

标签: javascript

我有一个非常大的JS脚本,包含许多函数,回调等等...我的第一个操作之一是从Ajax调用中获取值。然后我将此值设置为在脚本开头定义的全局变量,以便我可以反复引用该值...例如,确定用户语言的值。

// define my global var at the top of my script..
var globalOpCo = "";

// I then try to give this a value in the next function I call...
$.ajax({
        url:"getURL",
        type:"POST",
        dataType:"json",
        success:function(data){
            if(data === null){
            // do something...  
            }else{
            // set the current language...
                globalOpCo = data.Opco.toLowerCase();
                console.log(globalOpCo); // this is the value I want it to be from data.Opco.toLowerCase() 
                // now do something.... 
            }
        },
        error:function(xhr, ajaxOptions, thrownError){
            console.log(xhr.status);
            console.log(xhr.statusText);
            console.log(thrownError);
        }
    });

现在稍后在我的脚本中,我希望将globalOpCo传递给另一个函数,就像这样......

 $("#aButton").on("click", function(){
        anotherFunction(globalOpCo); // I want to pass the globalOpCo as an arguement but its value isn't get updated above?
    });

但是globalOpCo的值是一个空字符串!在运行上面的ajax调用之前或之前,无法单击#aButton。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:2)

默认情况下禁用您的按钮,在定义globalOpCo后在成功函数中添加onclick,并在设置onclick时启用它。奖励:现在它不再需要全局,因为需要它的代码紧挨着它。哪个好=)

答案 1 :(得分:0)

好的,我可能已经解决了这个问题!它是范围,变量在$("document").ready(function(){})内定义,而调用它的函数在$("document").ready(function(){})之外

答案 2 :(得分:0)

全局变量只是全局对象的属性,在浏览器中为window。您可以通过明确使用window.globalOpCo来避免确定范围问题。