По-прежнему
function create_isolated_closure(func)
{
var global = (function(){return this;}).call(null);
var undefined;
// перекрываем абсолютно все что есть в global
var scope = {};
for(attr in global) {
scope[attr] = undefined;
}
delete scope.alert; // оставляем доступ к alert(), чтобы тестировать функции
with(scope)
return eval("(function () {return ("+func.toString()+"); })()");
}
function test()
{
var w = (function(){return this})();
w.alert(['hacked', w.document]);
}
var t = create_isolated_closure(test); // делаем изолированную копию функции
t.call({}); // вызов изолированной копии, DOM недоступен