2017-01-03 16 views
0

私は、スクリプト内に配置されていないが、暗黙のうちに渡され、渡されたパラメータをJavaスクリプト機能のいくつかの例を見てきた例:。javascriptの陰関数変数

「XML」が定義されて
function myFunction(xml) { 
    var xmlDoc = xml.responseXML; 
    document.getElementById("demo").innerHTML = 
    xmlDoc.getElementsByTagName("title")[0].childNodes[0].nodeValue; 
} 

かリストされている?他の暗黙的なパラメータのリストはどこにありますか?

私はまた、次のように機能を見てきました:

$("body").click(function (event) { 
    // Do body action 

    var target = $(event.target); 
    if (target.is($("#myDiv"))) { 
    // Do div action 
    } 
    }); 

はどこ「イベントは」から来るか列挙されていますか?

ありがとうございます。

+0

[Javascriptのコールバックパラメータについて理解する](http://stackoverflow.com/questions/31769110/understanding-javascript-callback-parameters) – 4castle

+0

関数をパラメータとして渡すことができます。 'xml'はあなたの関数を呼び出すコードのパラメータとして渡されます。 – 4castle

答えて

0

「xml」はどこに定義されていますか?他の暗黙的なパラメータのリストはどこにありますか?

非常に機能定義に記載されています。私はのような関数を定義する場合:

function greet(name , greeting){ 
    console.log('hi ' + name); 
    console.log(greeting); 
} 

namegreeting VARSは単に関数定義の括弧内で定義されています。あなただけの、その関数の通過リテラルまたは変数を呼び出すことができます。

greeting('peter' , 'have a nice day'); 

//or: 

var name = 'Francisco'; 
var greeting = 'qué pasa hombre'; 
greet(name , greeting); 

2番目の例では、namegreeting VARSはまさに内部関数のパラメータのように呼ばれるように起こります。これはまあまあです。

var theAame = 'Francisco'; 
var theGreeting = 'qué pasa hombre'; 
greet(theName , theGreeting); 

正確に同じように動作します。また、javaScriptでは、関数に実際に定義されているパラメータより多くのパラメータを関数に渡し、argumentsキーワードまたはES6 spread syntaxでアクセスすることができます。

これはjavaScriptのパンとバターで、引数とパラメータがjavaScriptでどのように機能するかについての検索が役に立ちます。しかし、あなたの2番目の質問はもっと難しいです。また、この種のコードについて尋ねている

$("body").click(function (event) { 
// Do body action 

    var target = $(event.target); 
    if (target.is($("#myDiv"))) { 
    // Do div action 
    } 
}); 

これは似ているだけでなく、より複雑です。ここでは、$("body").click()はパラメータをとる関数です。このパラメータは別の関数であることがあります。これは一部の言語ではサポートされていない機能ですが、javascriptではかなり簡単です。

function reactToClick (event) { 
    // Do body action 

    var target = $(event.target); 
    if (target.is($("#myDiv"))) { 
     // Do div action 
    } 
} 


$("body").click(reactToClick); 

しかし、そのeventパラメータとそのreactToClick関数を呼び出している人:あなたはまた、そのコードをこのように書いているだろうか?まあ、この場合、ブラウザはそうです。

ブラウザには、関数のコールバックでイベントのようなクリックに登録するためのAPIがいくつかあります。$.click()は、そのメカニズムの構文上のヘルパーに過ぎません。最終的に機能を呼び出すブラウザーなので、内部を完全に理解することは難しく、私はしないでください。

しかし、あなたがあなた自身の非ブラウザ-APIに依存JavaScriptのコールバックを呼び出すコード、および設定パラメータと関数呼び出しを設定することができますが、同じように動作します。この例では

function theCallback(name , options){ 

    console.log('Im a callback function fired by someCallbackRegister whenever its fire methods is called'); 
    console.log('my callbackRegister name is: ' + name); 
    console.log('and the options provided in this call are: ' + options); 
} 

function someCallbackRegister(callback , registerName){ 

    return { 
     fire : function(options){ 
      callback(registerName , options); 
     } 
    } 
} 

var listener = someCallbackRegister(theCallback , 'Johhny'); 

listener.fire({ foo : 'bar'}); 

を、ありますメソッドコールの後にを呼び出していて、theCallbackのすべてのパラメータを正しく設定すると、eventオブジェクトを$.click()に渡すようにブラウザが正常に機能するようになります。

ホープこれは

PS :-)に役立ちます:JavaScriptのイベントループについてThis video私にどのようにブラウザのAPIの仕事を理解するために多くのことを助けました。

+0

詳細をご説明いただきありがとうございます! – zhussai1

1

これらの変数は、(ファンクション)パラメータと呼ばれます。これは、ほとんどのプログラミング言語の共通の機能です。それらは関数で定義され、単に関数内で定義される変数として機能します。関数のためだけに存在するため、関数の外で定義する必要はありません。

varと宣言されていないので混乱していると思います。なぜなら、あなたはそれらを「暗黙の変数」と呼んでいるからです。しかし、それらは暗黙的ではありません。それらは関数で定義されます。

jQueryのようなライブラリを使用している場合は、関数のドキュメントを参照して関数にパラメータを見つけることができます。例えば、.click()機能ハンドラはように定義されています

screenshot

(あなたがイメージを見ることができない場合、それはどこhandlerのタイプがあり、.click(handler)を示していますFunction(Event eventObject))あなたのよう

これは、関数呼び出し時に渡すことができる関数パラメータeventObjectを定義しています。任意の有効な変数名を使用してそのようにすることができます。

パラメータの詳細については、this MDN documentationを参照してください。

+0

@zhussaiこの回答が役立つ場合は、それを承認済みとしてマークしてください。 =) –

+0

ありがとうございました! – zhussai1

0
function myFunction(xml) { 
} 

このmyFunctionを呼び出す者は、変数xmlに保存される詳細を渡します。これはJS言語の構文です - ここではJavaのように変数の型を定義する必要はありません。あなたが行うとき

同様に、これは:

$("body").click(function (event) { 

    }); 

JS内部体がクリックされるたびにコールバックメソッドを登録します。内部的にイベントの詳細を関数に渡します。 console.log(event)を実行して、そこにすべての詳細が記載されていることを確認してください。

+0

ありがとうございます! – zhussai1

関連する問題