3

我不明白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
4

2 回答 2

3

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

规范第 48 页

于 2013-01-13T10:47:59.020 回答
3

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

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

你的结果解释:

f(10) // 20

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

f(10)(20) // 20 40

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

于 2013-01-13T11:06:35.803 回答