2011-04-08 17 views

答えて

3

関数の後に()を置くと、が呼び出され、関数が実行されます。あなたの例では、関数はaです。いずれの場合においても機能a()と呼ばれている1

d.c = a; 
d.c(); // Call function a 

例2

d.c = a(); // Call function a, put result in d.c 
d.c; 

例:

あなたの2つの場合のように考えることができます正確に1回 - したがって、同じアウトプt。

+0

「を実行するための機能を引き起こし..」ありがとう.. – Bagong21

0

最初のケースでは、this.c = aで、と呼ぶ関数へのポインタを使用してthis.cを設定しています。

1

最初のケース:

this.c=a; 

これは、関数aを参照する(bが上で呼び出されたように)オブジェクトのcプロパティを設定します。

の構文である()の構文を使用して(参照を介して)どの関数も呼び出すことができます。

第二の場合: "OK" の文字列である

this.c=a(); 

このコールa、及びaの結果(すなわち、戻り値)にcを設定し、。

cの値をalert(d.c)で取得すると、最初の例と同じ結果が得られますが、根本的に異なる方法で到着します。

片方向は関数自体への参照を格納し、その値が必要なときに呼び出す一方、もう一方は関数をすぐに呼び出し、後で取り出すために結果のみを格納します。十分に正しい答えがここにありますが、私は興味深い結果を示します

0

var counter = 1 

function a() { 
    return counter++ 
} 

function b() { 
    this.c = a; // your example 1 
    this.e = a(); // your example 2 
} 

var d = new b(); 

//a() was evaluated once, result put in e 
alert(d.e);   // 1 
alert(d.e);   // 1 
alert(d.e);   // 1 

//a() is evaluated each call: 
alert(d.c());  // 2 
alert(d.c());  // 3 
alert(d.c());  // 4 
+0

面白い...そう違いがあります – Bagong21

関連する問題