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
的值更新,您可以获得可用性的新评估。最近,有人对所有人投了否决票!这并不是唯一的问题,这家伙在哪里这么做。