[英]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.get
或jQuery.ajax
,因为.load
返回的jQuery的一个实例,不履行承诺的接口。
不,不应该。 “加载”不等待,您的“ someValidUrl”中的信息将被提取。 相反,当信息可用时,它将推迟内部函数在以后执行,并立即返回而无需等待。 它称为“异步”。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.