function a(){
return "ok";
}
function b(){
this.c = a;
}
var d = new b();
alert(d.c()); // Result "ok".
例2:
function b(){
this.c = a();
}
var d = new b();
alert(d.c); // Result "ok".
什麼圓括號在這種情況下,是什麼意思?
function a(){
return "ok";
}
function b(){
this.c = a;
}
var d = new b();
alert(d.c()); // Result "ok".
例2:
function b(){
this.c = a();
}
var d = new b();
alert(d.c); // Result "ok".
什麼圓括號在這種情況下,是什麼意思?
把()
放在函數後面調用它 - 導致函數被執行。在你的例子中,函數是a
。
您的兩個病例可被認爲是:
實施例1
d.c = a;
d.c(); // Call function a
實施例2
d.c = a(); // Call function a, put result in d.c
d.c;
在任一情況下,函數a
被調用與()
只有一次 - 因此他們產生相同的輸出噸。
在第一種情況下,使用this.c = a
將this.c
設置爲「指針」,然後用函數d.c()
調用該函數。
第一種情況:
this.c=a;
此設置對象的屬性c
(即b
上調用)向功能a
的參考。
使用()
語法(即alert(d.c())
)可以調用任何函數(即使通過引用)。
第二種情況:
this.c=a();
這呼叫a
,並設置c
到結果的a
(即返回值),其是字符串 「OK」。
然後,檢索值c
與alert(d.c)
將產生與第一個例子相同的結果,但它是以完全不同的方式得出的。
一種方式存儲對函數本身的引用,並在需要其值時調用它,另一種方式立即調用該函數並僅存儲結果供以後檢索。
雖然這裏有足夠的正確答案,我將展示一個有趣的結果:
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
有趣......所以有差別 – Bagong21 2011-04-08 05:31:09
「導致被執行的功能。」感謝.. – Bagong21 2011-04-08 05:20:42