Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/414.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 - Fatal编程技术网

我不知道';我不明白为什么JavaScript中的某个箭头函数的行为与常规函数不同

我不知道';我不明白为什么JavaScript中的某个箭头函数的行为与常规函数不同,javascript,Javascript,以下代码正常工作,应打印所有参数的总和: const s=[5,7,2]; 常数和=函数(){ 返回函数和(…参数){ 返回参数reduce((a,b)=>a+b); }; }(); log(sum(1,2,4,9))//按预期打印16个箭头函数永远无法命名,就像您使用 return function sum( 可以将它们指定给变量,如 在这种情况下,标识符fnName将引用该箭头函数,但箭头函数本身不会(也不能)具有成为函数内部标识符的名称。相反,完整的函数可以有一个名称,这就是您在原始代

以下代码正常工作,应打印所有参数的总和:

const s=[5,7,2];
常数和=函数(){
返回函数和(…参数){
返回参数reduce((a,b)=>a+b);
};
}();

log(sum(1,2,4,9))//按预期打印16个
箭头函数永远无法命名,就像您使用

return function sum(
可以将它们指定给变量,如

在这种情况下,标识符
fnName
将引用该箭头函数,但箭头函数本身不会(也不能)具有成为函数内部标识符的名称。相反,完整的
函数可以有一个名称,这就是您在原始代码中使用

return function sum(...args){
//              ^^^
线路

改变

const sum=()=>sum(...args)=>args.reduce((a,b)=>a+b);

const sum=(…args)=>args.reduce((a,b)=>a+b);
常数s=[5,7,2];

log(sum(1,2,4,9))
箭头函数永远无法命名,就像您使用

return function sum(
可以将它们指定给变量,如

在这种情况下,标识符
fnName
将引用该箭头函数,但箭头函数本身不会(也不能)具有成为函数内部标识符的名称。相反,完整的
函数可以有一个名称,这就是您在原始代码中使用

return function sum(...args){
//              ^^^
线路

改变

const sum=()=>sum(...args)=>args.reduce((a,b)=>a+b);

const sum=(…args)=>args.reduce((a,b)=>a+b);
常数s=[5,7,2];

console.log(sum(1,2,4,9))
外部箭头函数的内容如下:

sum(…args)=>args.reduce((a,b)=>a+b)

这是无效的:箭头函数表达式不能像函数表达式那样命名,它们只能指定给变量。解释器在试图调用外部
sum()
函数时读取上述代码,然后不知道在函数调用之后如何处理
=>

您的内部函数无论如何都不需要命名。最初的工作版本有
返回函数sum(…args){…}
,但它的工作原理与
返回函数(…args){…}
完全相同。由于没有区别,您也可以将箭头函数简化为:

const sum=(()=>(…args)=>args.reduce((a,b)=>a+b));

控制台日志(总和(1,2,4,9))外部箭头函数的内容如下:

sum(…args)=>args.reduce((a,b)=>a+b)

这是无效的:箭头函数表达式不能像函数表达式那样命名,它们只能指定给变量。解释器在试图调用外部
sum()
函数时读取上述代码,然后不知道在函数调用之后如何处理
=>

您的内部函数无论如何都不需要命名。最初的工作版本有
返回函数sum(…args){…}
,但它的工作原理与
返回函数(…args){…}
完全相同。由于没有区别,您也可以将箭头函数简化为:

const sum=(()=>(…args)=>args.reduce((a,b)=>a+b));

控制台日志(总和(1,2,4,9))
sum(…args)
-无效,您需要
(…args)
我不太明白为什么原始函数必须是一个生命。为什么不能是函数sum(…args){return args.reduce((a,b)=>a+b);}
sum(…args)
-无效,您需要
(…args)
我不太明白为什么原始函数必须是一个生命。为什么不能是
函数sum(…args){return args.reduce((a,b)=>a+b);}
注意,在赋值表达式的右侧,箭头函数确实有名称。您告诉我要交换的函数出现以下错误:ReferenceError:无法在初始化之前访问'sum'(/index.js:8)@JhonathanMizrahi您的
函数
示例正在创建一个返回函数的函数(立即调用)。不确定立即调用的意义是什么-您可以完全删除它(并使其成为
(…args)
,或者如果您希望箭头函数也可以立即调用以返回
(…args)
,则执行
常量和=(()=>(…args)=>args.reduce((a,b)=>a+b));
(但这很奇怪,它没有完成任何事情)注意,在赋值表达式的右侧,箭头函数确实有名称..您告诉我要交换的函数出现了以下错误:ReferenceError:无法在初始化之前访问'sum'(/index.js:8)@JhonathanMizrahi您的
函数
示例正在创建一个返回函数的函数(立即调用)。不确定立即调用的意义是什么-您可以将其完全删除(并使其成为
(…args)的函数)
,或者如果您想立即调用arrow函数以返回
(…args)
,请执行
常量sum=(()=>(…args)=>args.reduce((a,b)=>a+b));
(但这很奇怪,它什么都没有完成)注意原始函数实际上是一个生命。没有理由
sum=()=>(…args)=>…
。相反,等价物只是
sum=(…args)=>…
@ScottSauyet完全没有考虑到这一点。更新了答案,谢谢。请注意,原始函数实际上是一个生命。
sum=()=>(…args=>)
。相反,等价物只是
sum=(…args>)=>…
@ScottSauyet完全没有注意到这一点。更新了答案,谢谢。