为什么Javascript需要一个匿名函数来延迟执行
Why does Javascript need an anonymous function to delay execution?
在我的应用程序中,我需要进行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)
相关文章:
- 等待回调函数执行
- 暂停函数执行流程,直到ajax请求完成
- Bigcommerce-是否可以在函数执行后更改文本
- 如何对jquery中的未命名函数执行.call()
- 等待函数执行后再继续
- mootools类型的函数将文本作为函数执行
- 停止从另一个函数执行Javascript函数
- Jquery回调函数执行多次
- 如何使即兴 jquery 暂停当前函数执行
- JavaScript 双函数执行
- 来自函数 Javascript 的 NaN 返回值 ||函数执行顺序
- 如何在 JS 中调用 2 次或更多次时延迟函数执行
- 函数执行的次数超出预期
- JS中函数执行错误
- 为什么这个函数执行了两次
- 从子函数执行父函数;t更新父级'的属性
- 如何在jQuery函数执行's处于活动状态
- 使用javascript函数执行php文件
- jQuery函数执行顺序
- javascript中同步函数执行中的问题