@sanex3339

Есть ли способ сохранить static значение ф-ии, декларированной внутри другой ф-ии?

Многое уже перепробовал, но может тут мне подскажут?

Есть код вида

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).
  • Вопрос задан
  • 162 просмотра
Решения вопроса 1
Taraflex
@Taraflex
Ищу работу. Контакты в профиле.
var func = function() {
    alert('hello');
    func = function(){};
};

func();
func();
func();
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы