繁体   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