我试图实现一个将另一个函数作为参数的函数,并返回一个只能调用一次的函数的新版本。
对结果函数的后续调用应该没有效果(并且应该返回undefined)。
例如:
logOnce = once(console.log)
logOnce("foo") // -> "foo"
logOnce("bar") // -> no effect
答案 0 :(得分:1)
您可以在要传递的函数对象上使用标志作为参数
function once(func){
return function(){
if(!func.performed){
func.apply(this,arguments);
func.performed = true;
}
}
}
var logOnce = once(console.log);
logOnce("Test 1");
logOnce("Test 2");