Я не уверен, что вы подразумеваете под "снести замыкание".Определить, что это за функция, можно, используя arguments.callee :
function test () { console.log(arguments.callee); }
// -> function test () { console.log(arguments.callee); }
и какова область действия?
Единственный реальный способпроверить, находится ли переменная в области видимости, пытаясь получить к ней доступ.Это означает, что вам нужно использовать оператор try / catch, потому что выдается ошибка, если вы ссылаетесь на необъявленную переменную:
try{ myVar; alert("myVar is in scope"); }catch (e){ alert("myVar is not in scope"); }
Реально вы бы уже знали, какие переменные находятся в области видимости, если бы написали код илидаже проверяя код, если вы его не написали.
Если вы пытаетесь получить стек, вы можете (вроде) сделать это, используя свойство caller , но оно нестандартно и может быть доступно не во всехРеализации JS *:
function getStack () {
var stack = [], cFunc = arguments.callee;
while (cFunc = cFunc.caller)
stack.push(cFunc);
console.dir(stack);
}
function func1 () { func2(); }
function func2 () { try { obviousError(); } catch (e) { getStack(); } }
Большинство встроенных инструментов разработчика дают вам стек (в IE 7 и IE 8 нет) гораздо понятнее, поэтомуЛучше всего использовать их, где это возможно.
* В настоящее время все основные браузеры поддерживают Function.caller.Также кажется, что это определено в ECMAScript 3.1 - вы можете проверить поддержку здесь .