Показать сообщение отдельно
  #9 (permalink)  
Старый 26.08.2011, 07:09
m00 m00 вне форума
Интересующийся
Отправить личное сообщение для m00 Посмотреть профиль Найти все сообщения от m00
 
Регистрация: 10.11.2009
Сообщений: 22

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 недоступен
Ответить с цитированием