. , limitedEval. , , var, . 1 . - generators. - , , .
var limitedEval = function() {
var gen_name = Symbol();
return function limitedEval(src, context) {
if(!(gen_name in context)) {
var generator = function * () {
with(this) {
while(true) {
yield eval( yield );
}
}
};
context[gen_name] = generator.call(context);
context[gen_name].next();
}
context[gen_name].next( src );
return context[gen_name].next().value;
};
}();
var ctx = {};
limitedEval('var foo = "hello"', ctx);
limitedEval('alert(foo);', ctx);
limitedEval , ctx. , ctx. ctx, var. . ctx, .
, .
: , Symbol with(this) with(context)