当您宣布/致电财产时,括号是什么意思?

时间:2011-04-08 04:53:40

标签: javascript

示例1

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".

在这种情况下括号是什么意思?

4 个答案:

答案 0 :(得分:3)

在函数之后放置()调用 - 导致函数被执行。在您的示例中,函数为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都只用()调用一次 - 因此它们产生相同的输出。

答案 1 :(得分:1)

第一种情况:

this.c=a;

这会将对象的c属性(调用b)设置为对函数 a的引用。

可以使用()语法调用任何函数(甚至通过引用),这是alert(d.c())的作用。

第二种情况:

this.c=a();

调用a ,并将c设置为a的结果(即返回值),即字符串“ok”。

然后,使用c检索alert(d.c)的值将产生与第一个示例相同的结果,但它是以完全不同的方式得出的。

一种方法存储对函数本身的引用,并在需要其值时调用它,而另一种方法立即调用函数并仅存储结果以供以后检索。

答案 2 :(得分:0)

在第一种情况下,使用this.c = a,您将this.c设置为函数的“指针”,然后使用d.c()调用该函数。

答案 3 :(得分: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