我认为可以创建一个JavaScript函数,在完成运行后自动禁用它。
有可能吗?如何实现这种效果?
答案 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
答案 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();