JavaScript,双箭头函数()=>()=>{},返回匿名函数的函数
发布于 作者:苏南大叔 来源:程序如此灵动~

说到根本上,是js
的函数定义的方式太多了。这些函数定义的方式再组合一下,大家就蒙圈了。本文所说的双箭头函数就是这种情况,其实就是简写方式的不断组合罢了。
苏南大叔的“程序如此灵动”博客,记录苏南大叔的编程经验文章。测试环境:chrome@131.0.6778.70
,nodejs@20.18.0
。
匿名函数
匿名函数,是原生的js
就有的。而箭头函数是从es6
开始才有的。两者并不是一回事。
let s = function(){
return "sunan";
}
let n = () => {
return "sunan";
}
函数定义方式
下面的是一些比较常见的函数定义方式。
function s1(n1) {
return n1 + 1;
}
let s2 = (n2) => {
return n2 + 1;
};
let s3 = (n3) => n3 + 1;
let s4 = n4 => n4 + 1;
console.log(s1(1)); // 2
console.log(s2(1)); // 2
console.log(s3(1)); // 2
console.log(s4(1)); // 2
这里着重说的就是:
()=>{return "苏南大叔"}
当函数体非常简单,甚至就仅有一个return
,没有其它逻辑的时候,这种定义方式就生效了。它不需要{}
,也不需要return
关键字,甚至单独一个参数的情况下,()
都可以省略。上下这两种代码表述,是等效的。
()=>"苏南大叔"
特殊情况
这里有个特殊情况,就是直接返回的是个object
的时候,因为定义的方式是{}
。所以,如果简写下面这样的话,就报错了。
()=>{s:"n"}
因为这里的{}
大括号,不知道该解释为函数的一部分,还是说对象的一部分,有歧义。所以,正确的写法是:
()=>{return {s:"n"}}
或者写成:
()=>({s:"n"})
双箭头函数
()=>()=>{}
实际上第一个()=>
就是一个省略了{}
和return
关键字,它return
的是后面的这个箭头函数()=>{}
。
()=>{return()=>{}}
下面的代码里面,几个函数是等效的。看懂就可以完全理解双箭头函数了。
let s4 = (n4) => (d4) => {
return n4 + d4;
};
let s5 = (n5) => {
return (d5) => {
return n5 + d5;
};
};
function s6(n6) {
return function (d6) {
return n6 + d6;
};
}
console.log(s4(1)(5)); // 6
console.log(s5(1)(5)); // 6
console.log(s6(1)(5)); // 6
结语
不想写结语,本文太水了。哈哈哈。


