在我的应用程序中,我需要进行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();
});
我明白了:
inside function <ip_address>
function is done <ip_address>
正如我所料。这里发生了什么?为什么我需要在匿名函数中包装函数调用?
答案 0 :(得分:4)
你的代码说
}).done(printIp());
这样做是调用 printIp
并使用函数调用的结果作为done
方法的参数。
你真正想要的是将该函数作为done
处理程序传递。使用}).done(printIp);
来代替。
答案 1 :(得分:2)
您正在执行printIp
。不使用()
:
$.getJSON(ipUrl, function(data) {
window.ip = data['ip'];
console.log("inside function" + window.ip);
}).done(printIp);
答案 2 :(得分:2)
传递没有parantheses的函数,否则你马上调用它:
.done(printIp)