то, как обнаружить функцию, назвали с JavaScript

У меня есть функция JavaScript.

Как проверить:

  • если функция была вызвана (в <head></head> раздел имеет эту функцию), затем для не вызывания функции

  • если функция не была вызвана (в <head></head> раздел не имеет этой функции), затем вызовите функцию

как require_once или include_once с PHP

13
задан aleksandrbel 1 August 2018 в 13:50
поделиться

4 ответа

Использовать шаблон декоратора.

// your function definition
function yourFunction() {}

// decorator
function callItOnce(fn) {
    var called = false;
    return function() {
        if (!called) {
            called = true;
            return fn();
        }
        return;
    }
}

yourFunction(); // it runs
yourFunction(); // it runs    
yourFunction = callItOnce(yourFunction);
yourFunction(); // it runs
yourFunction(); // null

Это решение обеспечивает свободный от побочных эффектов способ достижения вашей цели. Вам не нужно изменять исходную функцию. Он отлично работает даже с библиотечными функциями. Вы можете присвоить декорированной функции новое имя, чтобы сохранить исходную функцию.

var myLibraryFunction = callItOnce(libraryFunction);
myLibraryFunction(); // it runs
myLibraryFunction(); // null
libraryFunction(); // it runs
11
ответ дан 1 December 2019 в 17:45
поделиться
var called = false;
function blah() {
   called = true;
}

if ( !called ) {
   blah();
}
3
ответ дан 1 December 2019 в 17:45
поделиться

Вы можете использовать глобальную переменную в пользовательском пространстве имен для хранения того, была ли вызвана функция.

if(!window.mynamespace){
    window.mynamespace={};
}

mynamespace.callMeOnlyOnce=function(){

    if(mynamespace.alreadyCalled)return;

    alert('calling for the first time');
    mynamespace.alreadyCalled=true;
};

// alert box comes
mynamespace.callMeOnlyOnce();


// no alert box
mynamespace.callMeOnlyOnce();
4
ответ дан 1 December 2019 в 17:45
поделиться
If (!your_func.called) {
    your_func.called = true;
    your_func();
}
0
ответ дан 1 December 2019 в 17:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: