Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/369.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 基本闭包示例混淆_Javascript_Closures - Fatal编程技术网

Javascript 基本闭包示例混淆

Javascript 基本闭包示例混淆,javascript,closures,Javascript,Closures,我正在学习Tyler McGinnis关于执行上下文、调用堆栈和闭包的教程 我对闭包示例有点困惑。我理解闭包是当一个函数在另一个函数中时。我还了解到内部函数可以访问父函数参数(如视频中所述) 我在下面的代码中感到困惑的是,当调用makeAdder(5)时,内部函数是否在第一次调用时也没有被调用?Tyler似乎建议在第一次调用makeAdder时将其从调用堆栈中弹出,只保留内部函数不变 第二部分我不明白当我们调用add5(2)时,这是调用makeAdder(5)否?当父函数只接受一个参数时,如何

我正在学习Tyler McGinnis关于执行上下文、调用堆栈和闭包的教程

我对闭包示例有点困惑。我理解闭包是当一个函数在另一个函数中时。我还了解到内部函数可以访问父函数参数(如视频中所述)

我在下面的代码中感到困惑的是,当调用makeAdder(5)时,内部函数是否在第一次调用时也没有被调用?Tyler似乎建议在第一次调用makeAdder时将其从调用堆栈中弹出,只保留内部函数不变

第二部分我不明白当我们调用add5(2)时,这是调用makeAdder(5)否?当父函数只接受一个参数时,如何添加两个参数

如果有人能一步一步地了解它是如何被调用的,那就太好了

var计数=0;
函数加法器(x){
返回函数内部(y){
返回x+y;
}
}
var add5=makeAdder(5);
console.log(add5);//对makeAdder的调用返回什么
计数+=add5(2);

控制台日志(计数)一个简单的方法是将其视为一个返回函数的函数——可以像普通函数一样调用函数,因为它是。因此,函数返回类型的第一个调用是一个函数

看下面的例子

function add(x,y){
 return x+y;
}

function subtract(x,y) {
 return x-y;
}

function calculator(type){
   if(type ==='add'){
     return add ; //here we are returning a function - the above add function
   }
   if (type==='subtract')
   {
    return subtract; // we are returning a function - the above subtract function
   }

   return null;
}

var fn = calculator('add'); // this call will return the function add which can be called as in below    

var result = fn(4,5);

console.log(result) ; ///should print 9
同样,第一个电话

var add5=makeAdder(5)

返回一个完全相同的函数

 function inner(y) { return x+5);

然后您可以调用add5(2),它基本上执行上述函数

一个简单的方法是将其视为一个返回函数的函数——它可以像普通函数一样调用,因为它是。因此,函数返回类型的第一个调用是一个函数

看下面的例子

function add(x,y){
 return x+y;
}

function subtract(x,y) {
 return x-y;
}

function calculator(type){
   if(type ==='add'){
     return add ; //here we are returning a function - the above add function
   }
   if (type==='subtract')
   {
    return subtract; // we are returning a function - the above subtract function
   }

   return null;
}

var fn = calculator('add'); // this call will return the function add which can be called as in below    

var result = fn(4,5);

console.log(result) ; ///should print 9
同样,第一个电话

var add5=makeAdder(5)

返回一个完全相同的函数

 function inner(y) { return x+5);
然后您可以调用add5(2),它基本上执行上述函数

当调用
makeAdder(5)
时,内部函数在第一次调用时是否也没有被调用

不,不是。此时仅调用
makeAdder
,而
makeAdder
本身不进行任何调用。它只返回一个对象,而该对象恰好是一个函数。返回一个函数是在没有实际调用它的情况下完成的

当我们调用
add5(2)
时,这是在调用
makeAdder(5)
no

它没有调用
makeAdder(5)
。前面的
add5
是调用
makeAdder(5)
的结果,因此
add5
就是这个内部函数。这里发生的特殊情况是,当调用
add5
时,“执行上下文”被还原,它表示
makeAdder
返回函数时内部的状态。这实际上意味着,当
add5
(内部函数)引用
x
变量时,它将在
x
中找到它先前调用
makeAdder
时的值

当父函数只接受一个参数时,如何添加两个参数

事实上,当我们调用父函数时,第二个参数还不知道,我们当时也不需要知道,因为内部函数当时还没有执行。调用父函数的重要一点是,我们建立了
x
的值,它将“继续”,即使只能通过调用内部函数来访问它

当我们调用内部函数时,我们提供了所需的第二个参数。然后,内部函数可以将它对
x
值的“神奇”引用(在我们进行父调用时提供)与它自己接收的正常参数结合起来

当调用
makeAdder(5)
时,内部函数在第一次调用时是否也没有被调用

不,不是。此时仅调用
makeAdder
,而
makeAdder
本身不进行任何调用。它只返回一个对象,而该对象恰好是一个函数。返回一个函数是在没有实际调用它的情况下完成的

当我们调用
add5(2)
时,这是在调用
makeAdder(5)
no

它没有调用
makeAdder(5)
。前面的
add5
是调用
makeAdder(5)
的结果,因此
add5
就是这个内部函数。这里发生的特殊情况是,当调用
add5
时,“执行上下文”被还原,它表示
makeAdder
返回函数时内部的状态。这实际上意味着,当
add5
(内部函数)引用
x
变量时,它将在
x
中找到它先前调用
makeAdder
时的值

当父函数只接受一个参数时,如何添加两个参数

事实上,当我们调用父函数时,第二个参数还不知道,我们当时也不需要知道,因为内部函数当时还没有执行。调用父函数的重要一点是,我们建立了
x
的值,它将“继续”,即使只能通过调用内部函数来访问它


当我们调用内部函数时,我们提供了所需的第二个参数。然后,内部函数可以将它对
x
值的“神奇”引用(在我们进行父调用时提供)与它自己接收的正常参数结合起来。

调用
makeAdder
不会调用
内部
。它返回
inner
,因此
add5
基本上等于
函数inner(y){return 5+y;}
我知道闭包是