function add(n) {
return function(x) {
this.value = n;
return this.value + x;
}
}
var add3 = add(3);
var add4 = add(4);
我试图弄清楚我是否可以重新编写以上函数: 允许修改第一个参数,如下所示:
add3.value(1);
console.log(add3(4))
// 5
此外,如果没有传递参数,则value方法返回当前值:
add3.value(1);
console.log(add3.value())
// 1
答案 0 :(得分:1)
函数只是对象,因此您可以为其指定属性value
,其值为修改n
的函数:
function add(n) {
var result = function(x) {
return n + x;
};
result.value = function(x) {
if (typeof x === 'undefined') {
return n;
}
n = x;
};
return result;
}
为什么你想要这样做我不知道,但这是可能的。
答案 1 :(得分:0)
要使用您所描述的界面,您的内部功能需要返回一个具有'值的对象'方法。 例如
function add (n) {
return {
value: function (x) {
x = x || 0;
return n + x;
}
};
}
但是,听起来你正在尝试做的事情就是讨好&部分申请。在这种情况下,返回一个函数可能更简单。
function add (n) {
return function (x) {
x = x || 0;
return n + x;
};
}
这样可以这样使用:
var add3 = add(3);
console.log(add3(4)); // output: 7
或使用默认值:
var add4 = add(4);
console.log(add4()); // output: 4
答案 2 :(得分:0)
与Felix's answer类似,但允许空输入,记住最后一个值并给它一个valueOf
,以便它可以像数字本身一样使用。
function adder(i) {
i || (i = 0);
var add = function (x) {
return i += (+x || 0); // += modifies i
};
add.value = function (x) {
return !x && x !== 0 ? i : i = (+x || 0); // if x falsy but not zero
};
add.valueOf = function () {
return i;
};
return add;
}
var add = adder();
add.value(1); // 1
add(4); // 5
add(5); // 10
add + 2; // 12, via valueOf
add(); // 10