我正在学习javascript,见过匿名函数这样写,没有任何解释:
const sum = (function() {
return function sum(x,y,z){
return (x+y+z);
};
})();
console.log(sum(1,2,3)); //6
我是这么读的:匿名声明一个函数,并将其赋给const sum。2调用sum()函数的参数,调用console.log()函数的结果。
这让我很困惑,因为我不明白为什么要这样写。一些问题是:
当最外层的函数没有指定参数时,sum如何接受参数?为什么我们不指定最外层函数的参数?为什么它返回自己?什么时候调用哪个'sum'?
如果太愚蠢或太明显,我道歉。我挣扎了很久,终于决定在这里问。
3条答案
按热度按时间4xrmg8kj1#
首先,这个函数不仅是匿名的,它是一个生命(立即调用函数),并且返回sum函数,所以常量变量
sum
实际上是由生命函数返回的sum函数。因此,在上面的行中,sum指的是iife函数返回的函数
sum
,而不是iife函数本身有关生命周期检查-https://developer.mozilla.org/en-US/docs/Glossary/IIFE的更多信息
kknvjkwl2#
为了更好地理解,我们可以将其扩展为:
自己测试一下:
这样的语法是用来保护中间变量和函数的。2在你的例子中没有这样的变量,但是:
函数
protected
和变量n
是密封的,不会向全局环境公开。whitzsjs3#
对于初学者来说,下面的代码中充满了令人困惑的不必要的错误信息:
1.外部匿名函数是不必要的,因为没有内部变量或函数需要保护--那么为什么要使用它呢?它只会让人感到困惑!!
1.为什么用“sum”来命名内部返回的匿名函数呢?它与常量和无关,只会在这里引起更多的混乱!!
1.所有上述代码是完全不必要的,多余的,和混乱时,考虑到以下是相同的: