2014-02-07 3 views

ответ

4

Попробуйте это:

var myFunction = function() { 
    alert("calling function only for once"); 
    myFunction = function(){ 
     return false; 
    } 
} 
myFunction();//alert "calling function only for once" 
myFunction();//should not alert 
2

хранить некоторые goobal переменную флаг при запуске функции и проверить эту переменную в начале функции.

1

установить флаг, и вызов в соответствии с этим флагом:

var IsAlreadyCalled=false; 
var myFunction = function() { 
    if(!IsAlreadyCalled){ 
     alert("calling function only for once"); 
     IsAlreadyCalled = true; 
    } 
} 
myFunction();//alert "calling function only for once" 
myFunction();//should not alert 
1

В вашем очень нечетной сценарии, самый простой способ установить логическое значение:

var run = true, 
    myFunction = function(){ 
     if(run){ 
      alert('calling function only for once'); 
      run = false; 
     } else { 
      return false; 
     } 
    }; 

myFunction(); // will run 
myFunction(); // won't run 

Таким образом, в дальнейшем если вы нужно «повторно активировать» его, вы можете просто вернуть логическое значение true и снова вызвать его.

run = true; 
myFunction(); // will run again 
0

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

// Takes a function and returns a function 
// that executes only once 
function once(f) { 
    var flag; 
    return function() { 
    if (!flag) { 
     flag = true; 
     return f.apply(this, arguments); 
    } 
    }; 
} 

var fn = once(function() { 
    console.log('logged!'); 
}); 

fn(); // logged! 
fn(); 
fn(); 

Демо:http://jsbin.com/povu/1/edit

Смежные вопросы