簡體   English   中英

奇怪的JavaScript作用域行為

[英]Weird JavaScript scoping behavior

Latey我在一些怪異的javascript行為上遇到了麻煩。 我想做這樣的事情:

var lang = null;

function getLang() {
    if (browserLanguageIsGerman) {
        lang = 'de';
    }
    else {
        lang = 'en';
    }
    // alert(lang) shows "de"

    $('#someID').load(someValidUrl, null, 
        function(response, status, xhr) {
            if(languageSettingsOnFacebookIsGerman) {
                lang = 'de';
            }
            else {
                lang = 'en';
            }
            // alert(lang) show "en"
    );
    // alert(lang) shows "de"
}

第一個和第二個警報顯示實際值1)“ de” 2)“ en”。 第三個警報顯示“ de”,但不應該是“ en”嗎? 同樣,第二個警報在第三個警報之后彈出。

有人可以請問一下我心中明顯的錯誤嗎? :)

提前致謝!

這不是范圍的問題。 load方法是異步的。 第三個alert在傳遞給load的回調之前執行。 將所有依賴於該異步調用結果的代碼移到回調中。

另外,您可以查看jQuery延遲對象API 請注意,如果你使用遞延對象API,你需要改變你打電話load到一個呼叫jQuery.getjQuery.ajax ,因為.load返回的jQuery的一個實例,不履行承諾的接口。

不,不應該。 “加載”不等待,您的“ someValidUrl”中的信息將被提取。 相反,當信息可用時,它將推遲內部函數在以后執行,並立即返回而無需等待。 它稱為“異步”。

暫無
暫無

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

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