我想知道是否可以改变函数的返回值,即:
var foo = function(options) {
var options = options || {},
bar = options.bar || "bar",
baz = options.baz || "baz";
return {
bar: bar,
baz: baz
}
};
我想这样称呼:
foo({
bar: this.bar + "ret"
});
我的期望是:
>>> { bar: "barret", baz: "baz" }
但我得到了这个:
>>> { bar: "undefinedret", baz: "baz" }
我们该怎么做?
答案 0 :(得分:2)
看起来像是一个范围问题。 this
并未指代foo
的范围。
这有效:
foo({
bar: foo().bar + "ret"
});
答案 1 :(得分:1)
外部函数体this
不可用,因此您的示例失败。你可以打电话:
foo({
bar: "barret"
});
或(如果您不想在函数之外使用默认值):
var x = foo();
x.bar += "ret";
或更改您的功能,再添加一个参数:
var foo = function(options) {
var options = options || {},
bar = options.bar || "bar",
baz = options.baz || "baz",
barSuffix = options.barSuffix || "";
return {
bar: bar + barSuffix,
baz: baz
}
};
foo({barSuffix: "ret"});
答案 2 :(得分:0)
结果的创建必须在函数内部进行,而不是在传递参数时发生。
(在创建传递的参数时,您无权访问函数内部)
var foo = function(options) {
var options = options || {},
bar = "bar" + (options.bar || ''),
baz = "baz" + (options.baz || '');
return {
bar: bar,
baz: baz
}
};
并称之为
foo({
bar: "ret"
});
会产生
>>> { bar: "barret", baz: "baz" }