通过参数更改函数的返回值

时间:2013-09-28 10:12:48

标签: javascript

我想知道是否可以改变函数的返回值,即:

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" }

我们该怎么做?

3 个答案:

答案 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" }