在我的应用程序中,我需要进行IP查询作为进行另一个需要该数据的函数执行的先决条件。最初,我按以下方式调用函数:
$(document).ready(function(){
var ipUrl = "myURL?callback=?";
$.getJSON(ipUrl, function(data) {
window.ip = data['ip'];
console.log("inside function" + window.ip);
}).done(printIp());
});
function printIp() {
console.log("function is done " + window.ip);
}
然而,这将输出为。
function is done undefined
inside function <ip_address>
例如,
printIp()
函数被调用时,$.getJSON
实际上还没有完成。但是,如果我将
printIp()
的调用包装在匿名函数中,如下所示:$.getJSON(ipUrl, function(data) {
window.ip = data['ip'];
console.log("inside function" + window.ip);
}).done(function() {
printIp();
});
I get:
inside function <ip_address>
function is done <ip_address>
正如我所预期的那样。这里发生了什么?为什么需要将函数调用包装在匿名函数中?
printIP
,而是它被调用后的结果。 - Paul S.