在函数变量赋值结束时没有()

时间:2013-09-20 13:21:47

标签: javascript function

我不明白为什么在此行this.chngName = changeName;上的changeName之后没有()。我的逻辑是this.chngName被赋值给函数返回,函数末尾有一个()。谢谢你回答。

function person(firstname, lastname, age, eyecolor) {
    this.firstname = firstname;
    this.lastname = lastname;
    this.age = age;
    this.eyecolor = eyecolor;

    this.chngName = changeName;

    function changeName(name) {
        this.lastname = name;
    }
}

myMother = new person("Sally", "Rally", 48, "green");
myMother.chngName("Doe");
document.write(myMother.lastname);

2 个答案:

答案 0 :(得分:3)

他们在那里做的是指没有调用它的功能。

var x = foo;   // Assign the function foo to x
var y = foo(); // Call foo and assign its *return value* to y

在JavaScript中,函数是对象。适当的对象。所以你可以传递给他们的参考。

更多说明:In JavaScript, does it make a difference if I call a function with parentheses?

答案 1 :(得分:0)

分配功能,而不是调用。否则myMother.chngName("Doe");无法正常工作,因为该函数不会返回另一个函数。分配changeName()的返回值无论如何都没有意义,因为它不会返回任何内容(因此它会自动返回undefined)。

更详细的说明:函数是JavaScript中的第一类对象。这意味着(除了其他一些东西)它们可以像任何其他值/对象一样传递并分配给任何变量。在这种情况下,changeName构造函数范围的本地函数person被分配给对象,使其可以从外部(实际上,从{{1创建的对象的任何地方)可用)。