I presume it is possible to create a JavaScript function that disables it self after it is done running.
Is possible? How can this effect be achieved?
I presume it is possible to create a JavaScript function that disables it self after it is done running.
Is possible? How can this effect be achieved?
 
    
     
    
    Wrap arbitrary runnable in following manner:
function once(subject) {
   var first = true;
   return function() {
     if (first) {
        first = false;
        return subject();
     } else {
        return null;
     }
   };
}
var wrapper = once(function() {alert("No more!");});
wrapper(); // alerts
wrapper(); // noop
Runnable will only be executed on first invocation of wrapper.
You can convert a function of arbitrary arguments to an argumentless runnable.
something like this?
function a(){ alert(1); a = null;}
invoke a() once, second time it will say
Uncaught TypeError: a is not a function
if the function is anonymous, then make it IIFE
(function(){ alert(1);})();
 
    
     
    
    If you want the functionality to be happen only once you can use the following function
function once(fn, context) { 
    var result;
    return function() { 
        if(fn) {
            result = fn.apply(context || this, arguments);
            fn = null;
        }
        return result;
    };
}
// Usage
var canOnlyFireOnce = once(function() {
    console.log('Fired!');
});
canOnlyFireOnce(); // "Fired!"
canOnlyFireOnce(); // nada
Courtesy: https://davidwalsh.name/essential-javascript-functions
 
    
    var _flag = true; // Have a flag variable.
function oneTimer(){
     // Check flag is set to true or not
     if(!_flag) return;
     _flag = false;
     // Your function definition here.
}
 
    
    As commented, if you want to execute a function only once, you should try IIFE. These functions are invoked immediately and cannot be called afterwards.
Following is a sample code.
(function test() {
  console.log("test");
  (function innerFunc() {
    console.log("Inner Function");
  })();
  try {
    innerFunc();
  } catch (ex) {
    console.log(ex)
  }
})();
try {
  test();
} catch (ex) {
  console.log(ex)
} 
    
    Pretty easy, just assign an empty function to the function:
function once() {
    alert('once');
    once = function () { };
}
once();
once();