这个函数如何将实参传递给另一个内部函数形参
How this function passes arguments to another inner function parameters
当我查看MDN以了解有关闭包的一些要点时,我遇到了以下函数:
它可能是javascript中已知的模式,但对于java或。net开发人员来说却很奇怪。我想知道它是如何工作的,我知道javascript语言中的参数和第一类对象行为,但add5(2)
如何分配2给y变量。
function makeAdder(x) {
return function(y) {
return x + y;
};
}
var add5 = makeAdder(5);
var add10 = makeAdder(10);
console.log(add5(2)); // 7
console.log(add10(2)); // 12
首先,任何有命名参数的地方都有一个隐式的变量声明。所以忘记上面的函数,只考虑这个
var example = function() {
var x = 5;
return function(y) {
return x + y;
}
}
var inner = example();
console.log(inner(5));
> '10'
你明白上面是如何工作的吗?如果没有,我建议你研究一下javascript闭包,看看它是什么意思。
关闭Javascript在上面的makeAdder函数中,唯一的区别是我们传递的是x的值,但是x仍然在外部函数中定义,并且结果返回的函数在其值
函数makeAdder
返回一个函数,因此变量add5
和add10
只是对函数的引用。当你用参数值调用这些函数时,它最终会在函数中作为参数y
。
public static Func<int, int> MakeAdder(int x) {
return y => x + y;
}
使用它:Func<int, int> add5 = MakeAdder(5);
Func<int, int> add10 = MakeAdder(10);
Console.WriteLine(add5(2));
Console.WeiteLine(add10(2));
makeAdder
返回如下函数:
var x = 5;
function add5(y){
return x + y;
}
makeAdder(5)
调用函数makeAdder,其中x绑定为5。这个函数返回另一个函数。此外,由于提供了x的值,因此makeAdder中的匿名函数知道x的值。
function(y) {
return 5 + y;
}
因此,通过将这个新函数赋值给add5, add5现在也是一个函数。如果我们调用add5(2)
,它将使用上面的函数,并执行以下操作:
function(2) {
return 5 + 2;
}
将输出7.
这是如何工作的?
在闭包中定义的函数'记住'中的环境
ref
相关文章:
- 多次调用另一个javascript函数中的javascript函数
- 另一个Ajax函数触发的Ajax函数不起作用
- 多次调用promise函数,直到另一个promise函数满足条件
- 获取javascript函数中另一个javascript函数的响应
- ajax没有;t成功后调用另一个js函数
- 由于另一个干扰函数,Javascript函数无法正常工作
- 从同一对象中的另一个调用函数
- 在执行另一个异步函数之前,只有当条件为true时,才执行某些异步函数的最佳方法
- JavaScript–从另一个原型函数调用原型的一个函数
- 有没有一种方法可以更改函数's来自另一个javascript函数的参数
- 如何将jQuery中某个函数的字符串作为参数返回给另一个jQuery函数
- 对另一个文件函数的引用
- 如何创建一个原型函数,将另一个原型函数绑定为语法糖(并保持实例的上下文)
- 如何在 JavaScript 中从另一个外部函数访问嵌套的内部函数
- JavaScript可以't调用另一个内部的原型函数
- 这个函数如何将实参传递给另一个内部函数形参
- 如何在另一个JavaScript函数内部调用变量或函数
- 为什么在另一个内部调用的函数不能访问外部函数的作用域?
- 从另一个Ajax函数内部调用函数.工作与纯javascript
- 在函数内部多次调用另一个JS函数会导致错误