increment
常量所分配的函数被包装在 IIFE(立即调用函数表达式)中。这意味着该函数会立即被调用和执行,正如其名称所示。然后它将返回对在 IIFE 中声明的函数的引用。
const increment = (function(){
return function increment(number, value){
return number + value;
};
})();
这个结果和这个是一样的:
const increment = function increment(number, value){
return number + value;
};
这是一个命名的函数表达式。如果按照这种模式,变量和函数都允许使用相同的名称。请尝试在控制台中像第二个代码块一样定义它。
区别在于变量increment
只是对函数increment
的引用。
但是在您的情况下,function increment
是在匿名函数范围内定义的。因此,increment
函数名称仅在该匿名函数的范围内可用。然后返回对increment
函数的引用。
虽然IIFE可以省略,因为它没有做任何不同的事情。但是,如果您想隐藏一些变量,则可以通过闭包来增加一些价值,例如:
const increment = (function(){
const hiddenValue = 2;
return function increment(number, value){
return number + value + hiddenValue;
};
})();
现在每次调用increment
函数时,hiddenValue
的值将被加到计算公式中。这样你就可以创建一种全局变量,它存在于IIFE的作用域中,不会污染你真正的全局作用域。
increment
变量(即在IIFE中定义的函数),当您在console.log
中调用该函数时,您还传递了参数。 - Teemu