Hacker News new | past | comments | ask | show | jobs | submit login

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/ce5f9c...

does quite a lot of this, if you want a real example.




This technique reminds me of Lambda Lifting: http://en.wikipedia.org/wiki/Lambda_lifting


Why not to write it in a much simplier way? Like this:

  function bar(n) {
    // still has dependency on q, r, s
  }
  foo(..., bar);


Yeah, 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.




Consider applying for YC's W25 batch! Applications are open till Nov 12.

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: