2012-04-14 5 views
0

これはおそらく非常に簡単ですが、私は何が起こっていたのかを解決できませんでした。Javascript:関数の戻り値を実際に理解できませんでした


function doSomething(a) 
{ 
    var num=10; 
    return setTimeout(
    function(){ a(num); }, 1000); 
} 

実際に私を混乱させるだけの事は(NUM)一部です。それは実際には何ですか?
注意: javascriptの構文に慣れていないので、私は本当に尋ねています。

答えて

3

functiondoSomething()は、それがパラメータaを渡され、実行され、 aもいくつかfunctionで、 その後num

Example usageと呼ばれる引数を渡すfunctiona()を呼び出します:

// call doSomething() passing the test() function as an argument 
doSomething(test); 


// takes a number as an argument and shows an alert with that value 
function test(number) 
{ 
    alert(number); 
} 

// takes a function as an argument that will perform a 1 second timeout then execute the function called a 
function doSomething(a) 
{ 
    var num=10; 
    return setTimeout(
    function(){ a(num); }, 1000); 
} 
0

変数numによって参照される値を引数として、変数aによって参照される関数を呼び出します。 setTimeout()は、1秒後に満了したときに、その後に呼び出され

+0

しかし、ここで、aがdoSomethingのために入力されています。では、それはどのように関数として機能しますか? – Ali

+0

@rolandbishop JavaScriptの機能はファーストクラスです。 http://en.wikipedia.org/wiki/First-class_function –

+3

@rolandbishop:関数は他のすべてのものと同様の値なので、変数に渡すことができます。 –

0

てclearTimeoutを使用して、それをキャンセルするために使用することができますtimeoutIDはを返すので、あなたがdoSomethingの多くの時間をを実行する場合は、timeoutIDは異なるを表す異なる整数を取得しますetTimeout。あなたが例num個のパラメータを使用して

それを呼び出すことができますので、あなたの場合は

は関数でなければなりません:

function doSomethingElse (justANumber) { 
    return justANumber + 1; 
} 

// Here you call your function 
doSomething(doSomethingElse); 

// or another special case 
doSomething(function (justANumber) {return justANumber + 1;}); 
関連する問題