2015-09-16 51 views

回答

3

你需要這樣的事情。這是一種常見的做法。您可以檢查回調參數是否首先存在,並且它實際上是一個函數。

function doSomething (argA, callback) { 

    // do something here 

    if (callback && typeof callback === 'function') { 
     callback(); 
     // Do some other stuff if callback is exists. 
    } 

} 
0

JavaScript是所謂的「鴨子打字」語言,這意味着在方法參數上沒有硬性限制。所有這些會沒事的:

function test() { 
    console.log(arguments); // [1, 2, 3], Array style 
    console.log(param1); // undefined 
    console.log(param2); // undefined 
} 

function test(param1) { 
    console.log(arguments); // [1, 2, 3], Array style 
    console.log(param1); // 1 
    console.log(param2); // undefined 
} 

function test(param1, param2) { 
    console.log(arguments); // [1, 2, 3], Array style 
    console.log(param1); // 1 
    console.log(param2); // 2 
} 

test(1, 2, 3); 

,你甚至可以用不同種類則params的呼籲:

test(); 
test(1, 2); 
test(1, 2, 3, 4, 5); 

所以只要你保持跟蹤你真正需要多少,你可以爲他們提供在方法定義。如果他們中的一些是可選的,你有兩個選擇:

  1. 定義但沒有使用這些
    • 這通常使用時的參數的長度,以便很小
  2. 使用arguments得到其餘的參數
0

我知道這是一箇舊帖子,但我沒有看到這個解決方案,我認爲它更乾淨。

只有當它是一個函數實例(因此可調用)時纔會調用回調函數。

function example(foo, callback) { 
    // function logic 

    (callback instanceof Function) && callback(true, data) 
} 

example('bar') 
example('bar', function complete(success, data) { 

}) 
相關問題