js函数式编程一道有趣的题目

在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;

标签: javascript

如果本文对您有所帮助,可以扫下面二维码给我支持,您的鼓励是我前进的动力!

微信

支付宝

目录

评论

*
*

正在加载验证码......

最新评论

  • 无评论