js> // only direct calls to eval should use scope of call js> // indirect calls should be allowed, but use global scope instead js> var value = 'outer'; js> (function() { var value = "inner"; return eval("value"); })(); inner js> (function(_eval) { var value = "inner"; return _eval("value"); })(eval); outer js> (function(obj) { var value = "inner"; return obj.eval("value"); })({eval:eval}); outer js> (function(obj) { var value = "inner"; return obj.f("value"); })({f:eval}); outer js> (function(arr) { var value = "inner"; return arr[0]("value"); })([eval]); outer js> (function() { var value = "inner"; return eval("eval")("value"); })(); outer