2016-08-12 7 views
0

はW3オンラインチュートリアルから撮影:Javascriptのオプションパラメータはどのように機能しますか?

$("button").click(function(){ 
    $("#div1").load("demo_test.txt", function(responseTxt, statusTxt, xhr){ 
     if(statusTxt == "success") 
      alert("External content loaded successfully!"); 
     if(statusTxt == "error") 
      alert("Error: " + xhr.status + ": " + xhr.statusText); 
    }); 
}); 

どのように関数呼び出しは、あなただけstatusTxtxhrに渡すと言うか、あなただけのxhrに渡したいように、渡しているパラメータを知っていますか?

私の男に簡単にアクセスしてください:)これはこれは、コールバックと呼ばれ、これまで

+2

あなたは順番に行く。最初のパラメータを使用すると、最初に渡されたパラメータが取得されます。 – Script47

+0

これはコールバック関数なので、渡されるパラメータを決定することはできません。それらは '.load()'によってあなたの関数に渡され、常にそれらすべてを渡します。あなたは気にしないものを無視することができます。 – Barmar

答えて

-1

私の最初の質問です。なぜなら、何かを使う前にドキュメントを読んでいるからです。コールバックは応答を送信できません。あるいは、多くのデータを返すことができます。あなたのケースでは、文書http://api.jquery.com/load/ に3つのパラメータが返されます。しかし、各図書館には独自のドキュメントがあり、それは独自のリターン結果です。お役に立てれば。

+2

これは、オプションの引数がどのように処理されるかという問題とは関係ありません。 – Barmar

+0

statusTxtとxhrだけを渡すか、xhrだけを渡したいといった、どのパラメータが渡されているかを関数呼び出しがどのように知っていますか?質問から?何? statusTxtとxhrはloadメソッドからのコールバックです。関数がコールバックで結果を返すので、関数が知っている... OMG ..ドキュメントの人を読んで!たぶん、私は正しくundestand質問ではありませんが、質問hes応答関数のパラメータをロードする関数に渡されない話しています。 –

1

これは、それに渡されたものの順番になります。

1 

以下の例を取り、

function test(callback) { 
    var x = 1, 
     y = 2, 
     z = 3; 

    if (typeof callback == 'function') 
    callback(x, y, z); 
} 

test(function (z, y, x) { 
    console.log(z); 
}); 

出力があろうが、元のコードでは、私がcallbackに最初1に等しいxを通過するので。私が名前を付けたものは問題ではありません。これに渡される関数は、callback関数と呼ばれます。

だけtypeofチェックを説明するために、私はあなたが使用する場合は、このテストでは、は、機能になるだろうされているが渡された変数は、実際には関数であるかどうかをチェックしていますあなたがそれを検証するのを常に保証することは、コールバックには良いことです。

1

これはパラメータの順序に基づいており、2番目または3番目のパラメータだけを渡すことはできません。

例では、1つのパラメータを渡す場合はresponseTxtになりますが、2つのパラメータはresponseTxtstatusTxtになります。 statusTxtを渡す場合は、responseTxtの場合はnull、次にstatusTxtの場合は値を渡す必要があります。

+0

これは完璧な答えであり、正確な変数名のマッチングに関係していると思うことから完全に遠ざかりました。XDありがとうございます –

+0

引数をスキップできるjQuery関数が多数あります。 jQueryは、渡された引数をデータ型を調べて調べます。 – Barmar

+0

それが機能するには、数と型のパラメータの別個のパターン、他の言語での関数/メソッドのオーバーロードのようなものがなければなりません。 – jmoerdyk

1

これは、通話から渡した各パラメータを左から右に割り当てるためではありません。あなたはあなたからコピーされたこの機能を、持っているとしましょう:

function someFunction(responseTxt, statusTxt, xhr){ 
    if(statusTxt == "success") 
     alert("External content loaded successfully!"); 
    if(statusTxt == "error") 
     alert("Error: " + xhr.status + ": " + xhr.statusText); 
} 

、あなたが変数の値を渡したいstatusTxt:「成功」とXHR:あなたはこの関数を呼び出しyour_xhr。このような関数を呼び出した場合:

someFunction( "success"、your_xhr);

これは "成功" はstatusTxtにパラメータresponseTxtとyour_xhrに割り当てられることを意味します。

通常は、あなただけのヌルにresponseTxtを設定し、あなたが望むものに休息を設定し、例えば可能性:

someFunction(ヌル、 "成功"、your_xhr)。

または、関数定義でオブジェクトリテラルを使用してください。ここでは例です:

function someFunction(options){ 
    if(options.statusTxt == "success") 
     alert("External content loaded successfully!"); 
    if(options.statusTxt == "error") 
     alert("Error: " + options.xhr.status + ": " + options.xhr.statusText); 
} 

とあなたの関数呼び出しは次のようになります。

someFunction({statusTxt: "成功"、XHR:your_xhr});もちろん

あなたはresponseTxtは、あなたがそれを使用しない場合は未定義であるかどうかを確認する必要があります。

これが役に立った。

関連する問題