Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/382.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 - Fatal编程技术网

使用函数声明的JavaScript闭包

使用函数声明的JavaScript闭包,javascript,Javascript,我看到闭包是使用函数表达式而不是函数声明来声明的。由于不熟悉java脚本,我有以下问题。我试着提出类似的问题,但对我没有帮助 闭包是否总是需要使用函数表达式声明 而不是函数定义 是否需要在中自调用闭包 函数表达式 我理解这两个函数之间的关键区别 声明和函数表达式id。有人能帮我吗 在什么时候,在什么情况下,我应该决定是否和他一起去 函数声明或函数表达式。使用它们中的任何一个的其他优点和缺点是什么 很抱歉,有些问题可能以前已经回答过,或者有点基本,但作为一个新手,我觉得很困惑 下面是我使用函数声明

我看到闭包是使用函数表达式而不是函数声明来声明的。由于不熟悉java脚本,我有以下问题。我试着提出类似的问题,但对我没有帮助

闭包是否总是需要使用函数表达式声明 而不是函数定义 是否需要在中自调用闭包 函数表达式 我理解这两个函数之间的关键区别 声明和函数表达式id。有人能帮我吗 在什么时候,在什么情况下,我应该决定是否和他一起去 函数声明或函数表达式。使用它们中的任何一个的其他优点和缺点是什么 很抱歉,有些问题可能以前已经回答过,或者有点基本,但作为一个新手,我觉得很困惑

下面是我使用函数声明所做的示例,但它没有给我正确的结果

功能计数器{ var计数=0; 返回函数{return count++;} } 柜台 闭包是否总是需要使用函数表达式而不是函数定义声明来声明

不可以。任何函数定义在外部范围变量上关闭时都将形成一个闭包

只是通常在使用闭包时,我们只想对函数对象执行一件事,所以我们只是将它作为一个表达式放在call或assignment或return语句中,而不是预先声明它并按名称引用它

闭包是否需要在函数表达式中自调用

不,大多数IIFE根本不是闭包。然而,它们通常为闭包定义提供了一个范围。尽管如此,闭包可以在任何类型的作用域中创建,即使在具有let/const的块作用域中也是如此

我理解函数声明和函数表达式之间的关键区别在于。使用它们中的任何一个的其他优点和缺点是什么

看一看

有谁能帮助我在什么时候,在什么情况下,我应该决定是使用函数声明还是函数表达式

无论何时使用函数表达式初始化变量声明,只需使用函数声明即可。否则,您将主要使用函数表达式

你的例子与这个问题没有任何关系。两者之间没有区别

function makeCounter() {
    var count = 0;
    return function increment() { return count++; }
}

除了第一行短一点。当然你必须这么做

var counter = makeCounter(); // assigns increment function to counter
counter(); // calls increment
数一数。在IIFE版本中,您只是将makeCounter内联为函数表达式:

var counter = (function makeCounter() {
    var count = 0;
    return function increment() { return count++; }
    // increment(); - this statement is never evaluated
})();
counter();
关闭

根据定义,闭包只是函数和声明函数的词汇环境的组合

在本例中,您声明了一个返回子函数的函数计数器。这意味着当您运行计数器时,它将返回一个函数引用,该函数引用具有计数器的词法范围。您需要调用该函数引用以增加计数器

var counterRef=计数器

柜台
将在您的情况下工作。

请仔细断线?您的第一个需要计数器,这可能会很奇怪,至少可以说函数表达式和函数定义之间到底有什么区别?由于上面的原因,您示例中的第一个是错误的,因此如果问题是我应该使用哪一个,请使用第二个。除此之外,我不清楚你问什么。
var counter = (function makeCounter() {
    var count = 0;
    return function increment() { return count++; }
    // increment(); - this statement is never evaluated
})();
counter();