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