3 ms·
So to answer myself, it does look like a reference is maintained despite no direct references existing within the inner function (unless eval is causing the ref
by schristo 15y ago
So to answer myself, it does look like a reference is maintained despite no direct references existing within the inner function (unless eval is causing the reference to be maintained):
(function () {
var foo = "bar";
return function(_var) {
return eval(_var);
}
})()('foo');
- grannyg00se 15y agoIt looks exactly like eval is causing the reference to be maintained. If you change the inner function call parameter 'foo' to ('alert("hi")') you'll see the reference to foo='bar' is still maintained in the inner function. So there is no -direct- reference to foo in the inner function, but there isn't even an -indirect- reference being made in the call to eval. The reference to foo is being maintained purely because eval "might" require it. Or so it appears. If the return eval(_var) statement is replaced with alert('blah') we're back to foo being undefined in the inner function. So I've definitely got my finger pointed at eval on this one.