Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么函数在返回自身时触发值?_Javascript_Function - Fatal编程技术网

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?我已经添加了一个答案。我肯定这是重复的,但我找不到合适的答案。