javascript - 不带参数的匿名函数返回带参数的自身
问题描述
我正在学习 javascript,并且看到了这样编写的匿名函数,没有任何解释:
const sum = (function() {
return function sum(x,y,z){
return (x+y+z);
};
})();
console.log(sum(1,2,3)); //6
我阅读它的方式是:匿名声明一个函数并将其分配给 const sum。使用参数调用 sum() 并调用 console.log() 结果。
这让我很困惑,因为我不明白为什么它是这样写的。一些问题是:
当最外层的函数没有指定参数时,sum 如何接受参数?为什么我们不指定最外层函数的参数?为什么它会返回自身以及何时调用哪个“总和”?
如果它太愚蠢或太明显,请道歉。苦苦挣扎,终于决定在这里问。
解决方案
首先这个函数不仅是匿名的。它是一个 iife(立即调用函数),它返回 sum 函数。所以 const 变量sum
实际上是 iife 函数返回的 sum 函数。
console.log(sum(1,2,3));
因此,在上面的行中 sum 是指 iife 函数sum
返回的函数,而不是 iife 函数本身
有关 iife 检查的更多了解 - https://developer.mozilla.org/en-US/docs/Glossary/IIFE
推荐阅读
- sorting - Google Apps 脚本:当给定列中的单元格不为空时激活和排序行
- mysql - 我应该将 createPool({ ... }) 放在 mysql/mysql2 的什么位置?
- javascript - 如何使用正则表达式将字符串拆分为不同字符的数组
- php - jquery - $(this).remove() 不适用于 each() 函数
- python - 有人可以帮我用环制作这个菱形吗?(Python)
- python-3.x - 烧瓶未刷新绘图/图像未从烧瓶更新
- python - 不正确的 python 字典到 JSON 的转换
- c - 此 scanf 语句不要求任何输入,并且 if else 梯形语句被跳过。为什么这样?
- r - 尝试加载数据以制作土壤含水量和水盐度的图表,但无法加载数据
- python - 如何按日期时间列对熊猫数据框进行排序?