为什么Javascript需要一个匿名函数来延迟执行

Why does Javascript need an anonymous function to delay execution?

本文关键字:函数 执行 延迟 一个 Javascript 为什么      更新时间:2023-09-26

在我的应用程序中,我需要进行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>

即在$.getJSON实际完成之前调用printIp()函数。

然而,如果我将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>

正如我所料。这是怎么回事?为什么我需要将函数调用封装在匿名函数中?

您的代码显示

}).done(printIp());

它的作用是调用printIp,并将函数调用的结果用作done方法的参数。

您实际想要的是将函数作为done处理程序传递。请使用}).done(printIp);来执行此操作。

您正在立即执行printIp。尝试不使用():

$.getJSON(ipUrl, function(data) {
    window.ip = data['ip'];
    console.log("inside function" + window.ip);
}).done(printIp);

在传递函数时不带参数,否则您将立即调用它:

.done(printIp)