繁体   English   中英

javascript中变量范围的混淆

[英]Confusion in variable scope in javascript

我在js中有一个函数,它填充一个全局数组,其值从服务器脚本获取为json:

function populateValues(id) {
    var values=new Array();

    $.getJSON(
        '<?PHP echo base_url();?>admin/forums/getForumById/' + id ,
        function(data){
            $.each(data,function(k,v){
                values.push(v);
            });
            alert(values[1]);
        }
    );
}

这很好,并提醒所需的值。 但是当我尝试在循环之后提醒它时,值会丢失并且我得到一个未定义的。 情况如下:

function populateValues(id) {
    var values=new Array();

    $.getJSON(
        '<?PHP echo base_url();?>admin/forums/getForumById/' + id ,
        function(data){
            $.each(data,function(k,v){
                values.push(v);
            });
        }
    );
    alert(values[1]);
}

是否由于某些闭合构造形成? 还是我缺少一些基本概念? 只是好奇地知道为什么即使我将数组声明为全局,也不会警告值。 请说清楚。

问题不在于范围。

问题是您正在进行AJAX调用,然后在AJAX调用完成之前立即继续执行下一个语句。

因此,你alert(values[1]); 在从AJAX调用填充数组之前。

这将修复它,使用AJAX调用返回的Promise对象:

function populateValues(id)
{
    var values=new Array();

    $.getJSON('<?PHP echo base_url();?>admin/forums/getForumById/'+id,function(data){
        $.each(data,function(k,v) {
            values.push(v);
        });
    }).done(function() { alert(values[1]); });
}    

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM