Javascript:为什么使用匿名函数和返回语句

Javascript:为什么使用匿名函数和返回语句,javascript,Javascript,标题并没有真正描述我要找的东西,所以我可以用例子来说明。 这两者之间的区别是什么: function Hotel(rooms, booked){ this.rooms = rooms; this.booked = books; this.checkAvailability = function(){ return this.rooms - this.booked; }; } 这是: function Hotel(rooms, booked){ this.rooms = rooms

标题并没有真正描述我要找的东西,所以我可以用例子来说明。 这两者之间的区别是什么:

function Hotel(rooms, booked){
 this.rooms = rooms;
 this.booked = books;
 this.checkAvailability = function(){
  return this.rooms - this.booked;
 };
}
这是:

function Hotel(rooms, booked){
 this.rooms = rooms;
 this.booked = booked;
 this.checkAvailability = this.rooms - this.booked;
 };
}
在我的第二个示例中,我没有使用匿名函数和return语句,但它给出了完全相同的结果。为什么呢?或者,哪一个是“正确的”一个?

没有一个被认为是“错误的”或“正确的”。他们做不同的事情

  • 顶部代码段创建了一个动态计算值的方法,而
  • 如果
    房间
    预订
    发生更改,则底部代码段将预计算该值,即
    检查可用性
    将不会更新以匹配该值
但是,在正常情况下,您可能希望执行以下操作:

class Hotel {
    constructor(rooms, booked) {
        this.rooms = rooms;
        this.booked = books;
    }
    checkAvailability() {
        return this.rooms - this.booked;
    }
}

这样可以避免创建同一函数的多个副本。

第一个副本应该是正确的。 第二个示例的checkAvailability仅在房间和预订不变的情况下有效

例如:

多功能酒店(客房预订){
这个房间=房间;
这是预定的;
this.checkAvailability=函数(){
归还此.rooms-此.booked;
};
}
功能不更新酒店(客房预订){
这个房间=房间;
这是预定的;
this.checkAvailability=this.rooms-this.booked;
}
酒店=新酒店(4,3)
console.log(hotel.checkAvailability())
酒店预订=2
console.log(hotel.checkAvailability())
酒店=新的非更新酒店(4,3)
console.log(hotel.checkAvailability)
酒店预订=2

console.log(hotel.checkAvailability)
在这里,您正在初始化,其他什么都没有。
checkAvailability
的状态永远不会改变

多功能酒店(客房预订){
这个房间=房间;
这是预定的;
this.checkAvailability=this.rooms-this.booked;
}
var酒店=新酒店(2,1);
酒店客房=1间;

console.log(hotel.checkAvailability);//请参见?,无论是否分配新值,结果都是2-1=1初始化vs函数调用。在顶部选项中,
this.checkAvailability
设置为不可变值--可以使用简单的点符号查看,并且永远不会更改,即使
this.rooms
this.booked
确实更改。在下面的代码块中,它是一个函数,调用时将返回值为
this.checkAvailability()
——这样,如果
this.rooms
this.booked
的值更新,您可以获得可用性的新评估。最近,有人对所有人投了否决票!这并不是唯一的问题,这家伙在哪里这么做。