Javascript 为什么函数在返回自身时触发值?
有人能解释为什么每次都会这样吗Javascript 为什么函数在返回自身时触发值?,javascript,function,Javascript,Function,有人能解释为什么每次都会这样吗 var v = () => { var c = () => c; c.valueOf = () => 1; return c; } v(); // 1 v()(); // 1 .... 控制台不是标准化的,它是一个依赖于实现的主机对象,试图提供帮助,请参阅 您已经运行了代码,但还没有告诉控制台如何处理结果,因此它自己决定如何处理它。在这种情况下,显示调用结果上的valueOf并显示该值。其他实现可能会做一些不同的事情,包括什么都不做(因
var v = () => {
var c = () => c;
c.valueOf = () => 1;
return c;
}
v(); // 1
v()(); // 1
....
控制台不是标准化的,它是一个依赖于实现的主机对象,试图提供帮助,请参阅 您已经运行了代码,但还没有告诉控制台如何处理结果,因此它自己决定如何处理它。在这种情况下,显示调用结果上的valueOf并显示该值。其他实现可能会做一些不同的事情,包括什么都不做(因为代码有结果,但没有输出) 使用
console.log(v())
或alert(v())
进行尝试,您将得到()=>c
,因为显式调用console或alert(通常)会调用传递给它的值上的toString,该值是对v的引用,因此它会调用解析为Function.prototype.toString的v.toString。警报也依赖于实现,但它相当简单,因此应符合事实行为
请注意,即使在这种情况下,控制台的不同实现也可能对不同的对象执行不同的操作。关于为什么控制台会给出特定的结果,进行一些搜索,这里有很多问题
var v=()=>{
var c=()=>c;
c、 valueOf=()=>1;
返回c;
}
console.log(v());//c=()=>c;
警报(v());//c=()=>c;
警报(v()());//c=()=>c代码>因为您正在将其发送到控制台。试试typeof v()
,你会得到“function”。涉及闭包的事实与发生的事情毫无关系。@RobG这不是答案。我可以返回c.valueOf=()=>1代码>并且它还将调用valueOf。问题是为什么会触发valueOf?我已经添加了一个答案。我肯定这是重复的,但我找不到合适的答案。