簡體   English   中英

Javascript:外部函數中的變量不會被內部函數更改

[英]Javascript: variable in outer function not changed by inner function

我對我相信Java閉包的誤解有一個小問題。

我有這段代碼-

getStdOpts: function(tbl, filt) {
    var vals = new Array();

    this.srvs.getStdOptions(
        { tbl: tbl },
        {
            'ok': function(rsp) {
                for (var i in rsp) {
                    vals.push({ value: rsp[i].id, text: rsp[i].descr });
                }
            }
        }
    );
    return vals;
}

本質上,盡管getStdOptions調用中的內部函數(“ ok”:function ...)將新值推入vals數組,但從調用外部進行訪問時,vals數組為空。 當從內部函數中訪問時,vals包含所有預期的元素。

我真的很感激我能在這個問題上獲得任何幫助。

我懷疑這是一個關閉/范圍的問題。 如果this.srvs.getStdOptions是異步操作,則您的getStdOpts總是將返回一個空數組。 一旦操作完成,該數組將被填充,正如您所寫的那樣,將在您需要它之后。 您將不得不處理一些不同的事情。 要么你需要直接傳遞到getStdOpts回調這將需要vals作為參數和您的匿名一個內執行的回調this.srvs.getStdOptions ,或者你需要返回某種承諾對象可向其中添加回調(這實際上將根據需要使用與參數相同的vals )-您必須在匿名回調中解析您希望將vals作為其“承諾”結果的承諾。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM