Sorry, your use of closure was unclear enough that I went with door #1 (mutating a closure by giving it an intrinsic name). I did wonder if you meant door #2 (creating an inner scope function other than by eval), and you did, so let's deal with that:

On May 10, 2009, at 4:20 PM, Laurens Holst wrote:

…by using a function constructor:

function a() {
  var x = 1;
  return Function.create('y', ['z'], {x: x}, 'return x+z;');
}
var y = a();
y(2);

No, that would not be nice. Consider the case where the created function mutates x. Consider obfuscation or infeasible-to-analysis arbitrary computation of the string parameters to Function.create, or even of the reference to Function.create that function a calls.

Only eval has to exact the stupid-taxes here. Let's not have another set of tax-hikes.


Or perhaps you would rather want to pass a reference to the local scope (‘arguments’?) instead of an individual variables.

Write a closure, or pay the eval tax. Why should Function.create make inner-scope closures? What is the real-world use case that can't use eval?

/be
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to