在js函数式编程这本书看到了这道题
var Flock = function(n) {
this.seagulls = n;
};
Flock.prototype.conjoin = function(other) {
this.seagulls += other.seagulls;
return this;
};
Flock.prototype.bread = function(other) {
this.seagulls = this.seagulls * other.seagulls;
return this;
}
var flock_a = new Flock(4);
var flock_b = new Flock(2);
var flock_c = new Flock(0);
var result = flock_a.conjoin(flock_c).bread(flock_b).conjoin(flock_a.bread(flock_b));
result的结果是?
1. 4 + 0 * 2 + 4 * 2 = 16
分析:
var a = float_a.conjoin(flock_c); // 4
var b = a.bread(flock_b); // 8
var c = float_a.bread(flock_b); // 括号里先算 4 * 2 = 8
结果是 8 + 8 = 16,错误
2. 4 + 0 * 2 + 8 * 2 = 24
分析:
var a = float_a.canjoin(flock_c); // 4
var b = a.bread(flock_b); // 8
第三步
float_a.bread(flock_b); // 这里由于 float_a 和 this 引用了同一个内存地址,所以此时的 this.seagulls 应该等于 8 * 2
结果是 8 + 16 = 24,错误
正确答案32
在第三步应该注意,8 * 2 = 16 是对的,flock_a.bread(flock_b) 返回的是 flock_a 的 this
在最后一步 conjoin 的时候,this.seagulls += other.seagulls; 这时候的 other 和 this 引用同一个内存地址,所以前面的 this.seagulls 在内存中变成了16,最后结果是 16 + 16 = 32;
最新评论