Source code
Revision control
Copy as Markdown
Other Tools
function a() {
return "a";
}
function b() {
return "b";
}
function c() {
return "c";
}
var names = ["a","b","c"];
function foo(name) {
return eval(name + "()");
}
for (var i = 0; i < names.length; i++)
assertEq(foo(names[i]), names[i]);
// Test bailout due to bad name passed to eval.
try {
foo("missing");
} catch (e) {
assertEq(/missing/.test(e), true);
}
function bar(name) {
return eval(name + "()");
}
for (var i = 0; i < names.length; i++)
assertEq(bar(names[i]), names[i]);
function recursion() {
return bar({ valueOf: function() { return "gotcha"; }});
}
function gotcha() {
return "gotcha";
}
// Test invalidation within call made after name lookup.
assertEq(bar("recursion"), "gotcha");