Многое уже перепробовал, но может тут мне подскажут?
Есть код вида
var func = function() {
};
func();
func();
func();
Внутри func может быть еще несколько внутренних вызовов типа:
Я хочу задекларировать еще одну ф-ию, назовем ее DeepestFunction, которую пихну в самый глубокий вызов из всей этой цепочки, но выполниться эта ф-ия должна всего 1 раз, независимо от того, сколько раз вызывалась ф-ия func.
var func = function() {
var func2 = function() {
var func3 = function() {
var DeepestFunction = function() {
if (DeepestFunction.flag) {
return;
}
// что-то делаем
DeepestFunction.flag = true;
};
DeepestFunction();
};
func3();
};
func2();
};
func();
func();
func();
Соответственно логично, что даже если я ставлю флаг - при новом вызове func все что внутри него декларируется заново в том числе и DeepestFunction.
Писать flag в глобальный объект я не хочу по некоторым причинам.
Есть ли все же какой нибудь хитрый способ, хак, что угодно - прогнать DeepestFunction только один раз, без записи флага в глобальный объект window?
Уточняю: на исходный код я влиять могу очень ограниченно.
Вставку ф-ии DeepestFunction я провожу автоматически во время работы с AST-деревом исходного кода (
esprima.org/demo/parse.html).