【问题标题】:function.toString() in javascriptjavascript中的function.toString()
【发布时间】:2013-01-13 10:44:40
【问题描述】:

我不明白 f.toString不调用它)如何评估相同函数的返回结果?

function f(a){
    console.log(a + a);
    f.toString = function(){return a};// this part is       
//confusing.
    return f;
};

f(10) // 20
f(10)(20)// 20 40

【问题讨论】:

  • 我看不出你从哪里得到返回值10f(10) 在控制台中为我提供20
  • 如果您删除toString 分配,您会得到相同的结果,不是吗?它在这里不做任何事情。请参阅:jsfiddle.net/AhCtn
  • 我们应该区分函数结果和从函数内部生成的控制台输出。控制台将显示 f(10) 为 20,而 toString 将结果为 10。 f(20) 相同,根据使用情况为 40 或 20。 console.log(f(10)) 应该在日志中显示 20 10。
  • 也许+ 令人困惑:它不仅仅是字符串连接运算符,还有算术加法运算符。如果你改用"" + a + a,你会得到10102020。也许这就是你的目的。

标签: javascript function tostring


【解决方案1】:

实际上f.toString 在您的场景中甚至没有被调用。如果您将删除此行 - 结果将是相同的。

如果您尝试执行console.log(f);,将调用f.toString()

您的结果解释:

f(10) // 20

函数f 使用参数10 调用,并打印到控制台console.log(10 + 10);

f(10)(20) // 20 40

第一部分如上,但 f 函数也返回自身 return f; ,这意味着第二部分 (20) 将再次被视为对同一函数的调用,并打印 console.log(20 + 20);

【讨论】:

  • 我想知道为什么这被否决了......对我来说似乎一切都很好。
【解决方案2】:

如果您尝试在字符串上下文中使用一个对象,那么它将通过调用它的toString() 方法将其转换为字符串。

the specification第48页

【讨论】:

  • 您输入的内容 - 与 OP 的问题无关
猜你喜欢
  • 2011-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多