怎么可能将参数传递给另一个同名函数内部的内部函数呢



我是JavaScript的新手,从Freecodecamp学习。这是学习高阶箭头函数时的一个脚本。我不能完全理解,下面的例子中有两个同名的函数吗?论点从哪里传来的?内部功能还是外部功能?如果答案是外函数,那么它怎么可能像外函数那样不需要任何论证。

const increment = (function(){
return function increment(number, value){
return number + value;
};
})();
console.log(increment(5,2));

分配给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函数名称仅在该anon函数的作用域中可用。然后返回对increment函数的引用。

尽管IIFE可以省略,因为它没有做任何不同的事情。如果你想合并一个闭包来隐藏一些变量,它可以增加一些值,例如:

const increment = (function(){
const hiddenValue = 2;
return function increment(number, value){
return number + value + hiddenValue;
};
})();

现在,每次调用increment时,hiddenValue都会添加到公式中。通过这种方式,你可以创建一种全局变量,它位于IIFE的范围内,不会污染你的实际全局范围。

您可以将两个函数放在一起,并在主函数中调用该函数但在另一之外

function firstOne(){
console.log('first function is working.')
function secondOne(){
console.log('second function is working')
}secondOne();
}firstOne() 
return function increment(number, value){
return number + value;
};

在上面的代码中,函数名并不重要,删除它不会有任何改变。唯一对外部世界重要的函数名称是常量名称。此处为伪代码:

const increment = (anonymous func (return a func)) (self call);

如果没有LHS(左手边(分配,执行后所有东西都会丢失。

最新更新