5 ms·
If you have a function foo() that takes a callback as an argument i.e. something like: foo(..., function (n) { // closure over q, r, s }); Then what
by mjs 16y ago
If you have a function foo() that takes a callback as an argument i.e. something like:
foo(..., function (n) {
// closure over q, r, s
});
Then what you can do is create a separate function, bar() that takes q, r, s as an argument, and returns a function:
function bar(q, r, s) {
return function(n) {
// still has dependency on q, r, s
}
}
Once you have bar(), the foo() call above can be written as:
foo(..., bar(q, r, s));
and you save one level of nesting. (This also makes the dependencies explicit, which is helpful.)
The main loop of
https://github.com/ithinkihaveacat/node-fishback/blob/ce5f9c308db6a12f15fb0d790c53dfb2f60eaf9c/lib/fishback.js#L313 https://github.com/ithinkihaveacat/node-fishback/blob/ce5f9c...
does quite a lot of this, if you want a real example.
- jlyke 16y agoThis technique reminds me of Lambda Lifting: http://en.wikipedia.org/wiki/Lambda_lifting http://en.wikipedia.org/wiki/Lambda_lifting
- svetlyak40wt 16y agoWhy not to write it in a much simplier way? Like this: function bar(n) { // still has dependency on q, r, s } foo(..., bar);
- mjs 16y agoYeah, that's nicer if bar() can be defined at the same "level" as foo() but if it makes more sense to move it somewhere else the closed-over variables need to be passed.