运行后禁用JavaScript函数

时间:2016-01-08 07:58:41

标签: javascript function

我认为可以创建一个JavaScript函数,在完成运行后自动禁用它。

有可能吗?如何实现这种效果?

6 个答案:

答案 0 :(得分:2)

这样的事情?

function a(){ alert(1); a = null;}

一次调用a(),第二次调用

Uncaught TypeError: a is not a function

如果该函数是匿名的,则将其设为IIFE

(function(){ alert(1);})();

答案 1 :(得分:2)

以下列方式包装任意runnable:

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只会在首次调用包装器时执行。

你可以convert a function of arbitrary arguments to an argumentless runnable

答案 2 :(得分:2)

如果您希望仅在可以使用以下功能后才能发生此功能

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

礼貌:https://davidwalsh.name/essential-javascript-functions

答案 3 :(得分:1)

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.


}

答案 4 :(得分:1)

如评论所述,如果您只想执行一次函数,则应尝试IIFE。这些函数会立即调用,之后无法调用。

以下是示例代码。

(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)
}

答案 5 :(得分:1)

非常简单,只需为函数指定一个空函数:



function once() {
    alert('once');
    once = function () { };
}

once();
once();