我不知道';我不明白为什么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完全没有注意到这一点。更新了答案,谢谢。