私はJavaScript関数を持っています。
確認方法:
関数が呼び出された場合(<head></head>
セクションにこの関数があります)。次に、関数を呼び出さないようにします
関数が呼び出されなかった場合(<head></head>
セクションにこの関数は含まれていません)、関数を呼び出します
お気に入り require_once
またはinclude_once
with [〜#〜] php [〜#〜]
静的変数
ここでは、自己呼び出し関数を使用して静的変数(Cなど)を作成し、静的変数をクロージャーに格納する方法を説明します。
var myFun = (function() {
var called = false;
return function() {
if (!called) {
console.log("I've been called");
called = true;
}
}
})()
アイデアを抽象化
1回だけ呼び出される関数を返す関数を次に示します。これにより、すべての関数にボイラープレートコードを追加する必要がなくなります。
function makeSingleCallFun(fun) {
var called = false;
return function() {
if (!called) {
called = true;
return fun.apply(this, arguments);
}
}
}
var myFun = makeSingleCallFun(function() {
console.log("I've been called");
});
myFun(); // logs I've been called
myFun(); // Does nothing
デコレータパターンを使用します。
// 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
カスタム名前空間のグローバル変数を使用して、関数が呼び出されたかどうかを保存できます。
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();
var called = false;
function blah() {
called = true;
}
if ( !called ) {
blah();
}
If (!your_func.called) {
your_func.called = true;
your_func();
}