jiv*_*key 1 javascript recursion
我被要求创建一个函数来实现以下内容,加上一些数字,然后调用它们的全部值,即一个链接的函数,我创建了一个糟糕的解决方案,但想不出更好的方法.
add(5).add(10).add(20).value();
Run Code Online (Sandbox Code Playgroud)
面试问题刚开始是空功能
function add() {
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案在下面,有没有人有任何其他建议,因为我感兴趣,我看了currying,绑定等但没有想出一个优雅的解决方案.
var slice = Array.prototype.slice
function add() {
var arr = slice.call(arguments);
return {
add: function() {
arr = arr.concat(slice.call(arguments))
return this;
},
value: function() {
return arr.reduce(function(prev, curr) {
return prev + curr;
});
}
}
};
Run Code Online (Sandbox Code Playgroud)
编辑 只是为了澄清我想知道是否有办法在不返回添加功能但是调用现有的添加功能的情况下执行此操作.我认为下面的方式很好,但我认为面试官正在寻找一些不简单的东西.
为什么这么复杂?不要随身携带那些价值观.此外,尽量保持功能,不要改变它.
function add(x) {
return {
value: function() {
return x;
},
add: function(y) {
return add(x+y);
}
};
}
Run Code Online (Sandbox Code Playgroud)
这里的关键见解似乎是链接不只是意味着return this,而是同一个类的任何对象.不变性决定了当它附加不同的总和时它应该是一个不同的对象.
| 归档时间: |
|
| 查看次数: |
77 次 |
| 最近记录: |