访问在函数内部改变的变量(jQuery)

时间:2013-09-10 00:28:39

标签: javascript jquery json variables

我正在尝试访问我在函数中设置的变量。我需要在函数之外访问它。我试图在函数外部首先设置变量,然后在函数内部改变它,但这似乎不起作用。这是我的代码:

location_var =""; //i've tried both location_var and var location_var here

$.getJSON('/v/js/round.js', function(data) {

    var location_var = "location.pathname.indexOf('/product-p/test-product.htm')"

        for(i=0; i<data.records.length-1; i++){     
            var location_var = location_var + " || location.pathname.indexOf('" + data.records[i].productcode + "')";
        }

});

console.log(location_var);

我只是在注销时得到一个空字符串。当我从JSON函数中注销它时,我得到正确的值。我基本上只是循环遍历JSON文件并打印出值。

我也试过这里的答案(How to store a global value (not necessarily a global variable) in jQuery?),但试图以$ .getJSON.location_var的形式访问这些变量但是也没有用。

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

您的代码存在两个问题。

首先 - location_var的范围是内部函数。 For example

var foo = 1;
(function(){
    var foo = 2;
})();
alert(foo); // alerts '1'

第二个var创建一个作用于该函数的新变量,而alert语句则查看附加到外部作用域的foo变量。

可以通过移除内部var来解决这个问题 - 但这是一个混乱的解决方案,污染了全局范围 - 并且因为另一个而无法工作代码中的错误:

getJSON调用 asyncronous - 即发送远程请求,然后执行其他代码,然后收到响应回调功能执行。换句话说,在您记录该值时,尚未收到响应。

您需要确保从回调中调用任何依赖于location_var新值的代码,例如:

$.getJSON('/v/js/round.js', function(data) {
   ...code...
   console.log(location_var);
});

答案 1 :(得分:0)

试试这个:

$.getJSON('/v/js/round.js', function(data) {

    window.location_var = "location.pathname.indexOf('/product-p/test-product.htm')"

    for(i=0; i<data.records.length-1; i++){     
        location_var = location_var + " || location.pathname.indexOf('" + data.records[i].productcode + "')";
    }

    console.log(location_var);

});