作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这可能是个愚蠢的问题,但由于所有“Closure 101”链接,我似乎无法利用谷歌...
总而言之,给定依赖于闭包上下文的重复代码,有没有一种方法可以将代码去重到函数调用中,同时仍然让新函数仅依赖于闭包而不是通过参数传递它需要的一切?
粗略的代码示例可能如下所示:
function doWork(){
// initialize variables
// manipulate variables
// ...
$.ajax({
//...
success: function(data){
// DUPLICATE CODE INSTANCE 1 HERE
// RELIES ON VARIABLES IN THE CLOSURE
}
});
// More code
$.ajax({
//...
success: function(data){
// DUPLICATE CODE INSTANCE 2 HERE
// RELIES ON VARIABLES IN THE CLOSURE
}
});
}
据我所知,如果我将成功 block 中的逻辑去重到
function onSuccess(...){
// ...
}
然后 onSuccess 不再是闭包的一部分,因此需要将所有闭包变量作为参数传递给当前逻辑正在使用闭包访问的地方。
关于闭包的工作原理我错了吗?有没有办法将闭包“传递”给 onSuccess 函数而不是传递单个变量?
最佳答案
你对关闭行为没有错。您可以做的是在 doWork
中声明 onSuccess
函数。
function doWork(...) {
function onSuccess(...) {
// ...
}
$.ajax({
//...
success: onSuccess
});
$.ajax({
//...
success: onSuccess
});
}
关于javascript - 将通用 js 代码移动到函数是否会因依赖闭包而受阻?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16289931/
我是一名优秀的程序员,十分优秀!