2014-10-28 75 views
0

我想實現一個函數,將另一個函數作爲參數,並返回該函數的新版本,只能調用一次。函數作爲JavaScript中的函數的參數

對結果函數的後續調用應該沒有效果(並且應該返回undefined)。

例如:

logOnce = once(console.log) 
logOnce("foo") // -> "foo" 
logOnce("bar") // -> no effect 
+0

你有工作[小提琴](HTTP ://jsfiddle.net/)來說明你的問題?因爲現在,我們無法理解它... – sp00m 2014-10-28 08:52:34

+0

你的問題是什麼? – Clive 2014-10-28 08:52:42

+0

他想要一個只能運行一次的函數。 – 2014-10-28 08:53:41

回答

1

您可以obeject您傳遞作爲參數的函數中使用標誌

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");

+0

感謝您的答案,但它應該只運行一次,第二次應該什麼都不做(或返回undefined)。 – Vishwa 2014-10-28 09:28:24

+0

第二次它不記錄事實 – 2014-10-28 09:34:20