我正在阅读javascript手册,我有以下代码:
//sum
function sum(arg1) {
var sum = arg1;
function f(arg2) {
sum += arg2;
return f;
};
f.valueOf = function () {
return sum;
};
f.toString = function () {
return sum;
};
return f;
}
我按照这样执行:
console.log(sum(1)(2)(3)(4));
根据手册console.log
应输出valueOf
功能
但输出
function 10
请解释一下这种行为。
答案 0 :(得分:3)
根据手册console.log应该输出valueOf函数的结果
我不知道"手册"您正在谈论,但总的来说,console.log
并没有在您输出的内容上调用valueOf
。 console.log
的实现从JavaScript引擎到JavaScript引擎各不相同,但总的来说,它们会尝试为您提供比调用valueOf
更有用的信息。
如果您想触发valueOf
,您需要有意识地执行此操作,例如:
console.log(sum(1)(2)(3)(4).valueOf());
// ------------------------^^^^^^^^^^
或(因为您的功能旨在产生一个数字):
console.log(+sum(1)(2)(3)(4));
// ---------^
示例:
function sum(arg1) {
var sum = arg1;
function f(arg2) {
sum += arg2;
return f;
};
f.valueOf = function () {
return sum;
};
f.toString = function () {
return sum;
};
return f;
}
console.log(sum(1)(2)(3)(4).valueOf());
// ------------------------^^^^^^^^^^
console.log(+sum(1)(2)(3)(4));
// ---------^

Look in the actual browser console; the Stack Snippets console doesn't quite do what the real browser console does.