簡體   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