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()
{
alert(document);
alert(window);
}
test(); // обычный вызов, DOM доступен
var t = create_isolated_closure(test); // делаем изолированную копию функции
t.call({}); // вызов изолированной копии, DOM недоступен