2017-05-23 4 views
0

これはJavaScriptでどのように実装されていますか?関数シグネチャの途中にあるオプションの引数はどのように実装されていますか?

function myFunc(arg1, [optionsObject,] callback) 

optionsObjectが欠落している場合、コールバックは、第二の位置の代わりに、第3の位置になります。どのように関数がこの状況を認識し、それを適切に処理しますか?

+4

' "機能" や' ' "オブジェクト"'のいずれかである 'typeofをsecondArgument'、何かのように、多分:

ここでのサンプルコードでは、ですか?または 'arguments.length'は' 2'か '3'です。 – Xufox

答えて

3

これは機能しているJSではなく、機能自体、あなたのケースではmyFuncです。通常は、arguments(あなたの引数を含む配列のような構造)をとり、最後の項目が何であるかを判断することです。それが関数なら、それをポップアウトしてコールバックとして受け取ります。残っているのは単純な議論です。

function myFunc(){ 
    // arguments is usually turned into an array to access array methods 
    var args = Array.prototype.slice.call(arguments); 

    // Check the type of the last item 
    var hasCallback = typeof args[args.length - 1] === 'function'; 

    // If the last item is a function, it's probably a callback. Pop it off. 
    var callback = hasCallback ? args.pop() : function(){}; 

    // By now, args is your argument list and callback is a function that either 
    // does something or is a noop. 
} 
関連する問題