我有一个包含回调的函数,我想在它完成时有选择地中继回原始函数调用...如果这有意义的话。
例如:
const UI = {
update : function(var1) {
$(var1).animate({ opacity: 0 }, 100, "linear", function() {
// Callback 1: Do stuff
});
}
}
我想要的是:
UI.update("whatever", function() {
// Callback 2: Do more stuff after Callback 1 is complete
});
是否可以像这样内联?
最佳答案
是的,当然 - 只需为回调声明一个参数,然后如果 update
在动画结束时不需要做任何事情,只需将回调传递给 animate
直接:
const UI = {
update : function(var1, callback) {
// -------------------------^
$(var1).animate({ opacity: 0 }, 100, "linear", callback); // ***
}
};
如果 update
在调用回调之前需要做更多的工作,只需在 animate
回调中调用回调:
const UI = {
update : function(var1, callback) {
// ---------------------^
$(var1).animate({ opacity: 0 }, 100, "linear", function() {
// ...work `update` does here...
// Call the callback:
if (callback) { // ***
callback(/*...perhaps some arguments here...*/); // ***
} // ***
});
}
}
在 update
返回之前调用 callback
并不是问题。 animate
回调是 闭包¹,² 在 var1
和 callback
(更准确地说,是在它们存在的词法环境中),因此它们在 update
返回后仍可访问。
您可能会对上面显示的“真实”检查感到满意。其他时候,人们更严格,例如:
if (typeof callback === "function") {
(许多年前,在网络浏览器中,一些主机提供的函数的 typeof
是 "object"
而不是 "function"
code>,但所有现代浏览器都确保它现在是“函数”
。)
有关闭包的更多信息:
¹ Closures are not complicated在我贫血的小博客上(一些过时的术语,但是......)
关于javascript - 回调中的内联回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56819007/