Два варианта:
Статические переменные Ниже описано, как создавать статические (как в C) переменные, используя функции собственного вызова для хранения статических переменных в замыкании.
var myFun = (function() {
var called = false;
return function() {
if (!called) {
console.log("I've been called");
called = true;
}
}
})()
Замена пустой функции Установить функцию на пустую функцию после ее запуска.
function callonce() {
console.log("I've been called");
arguments.callee = function() {};
}
Абстрактная идея Вот функция, которая возвращает функцию, которая тольковызывается один раз, поэтому нам не нужно беспокоиться о добавлении кода котельной пластины в каждую функцию.
function makeSingleCallFun(fun) {
var called = false;
return function() {
if (!called) {
called = true;
return fun.apply(this, arguments);
}
}
}
// Alternate implementation
function makeSingleCallFun(fun) {
return function() {
return fun.apply(this, arguments);
arguments.callee = function() {};
}
}
var myFun = makeSingleCallFun(function() {
console.log("I've been called");
});
myFun(); // logs I've been called
myFun(); // Does nothing