Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/469.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,在阅读了JavaScript中的闭包之后,我仍然无法理解它们在哪里使用?如果没有闭包,那么事情将如何交替进行(如果可能的话),闭包的使用会简化什么。如果有人能用JavaScript中的一些代码示例来解释这一点,那将很有帮助。欢迎链接到解释这一点的文章。 我读过一篇文章中提到的。它用这样的代码解释 function makeSizer(size) { return function() { document.body.style.fontSize = size

在阅读了JavaScript中的闭包之后,我仍然无法理解它们在哪里使用?如果没有闭包,那么事情将如何交替进行(如果可能的话),闭包的使用会简化什么。如果有人能用JavaScript中的一些代码示例来解释这一点,那将很有帮助。欢迎链接到解释这一点的文章。 我读过一篇文章中提到的。它用这样的代码解释

    function makeSizer(size) {
      return function() {
        document.body.style.fontSize = size + 'px';
      };
    }

    var size12 = makeSizer(12);
    var size14 = makeSizer(14);
    var size16 = makeSizer(16);

document.getElementById('size-12').onclick = size12;
document.getElementById('size-14').onclick = size14;
document.getElementById('size-16').onclick = size16;
function sizer(size) {
            document.body.style.fontSize = size + 'px';
          };

    document.getElementById('size-12').onclick = function(){sizer(12)};
    document.getElementById('size-14').onclick = function(){sizer(14)};
    document.getElementById('size-16').onclick = function(){sizer(16)};
但是,当我可以轻松创建这样的函数时,为什么要这样做呢

    function makeSizer(size) {
      return function() {
        document.body.style.fontSize = size + 'px';
      };
    }

    var size12 = makeSizer(12);
    var size14 = makeSizer(14);
    var size16 = makeSizer(16);

document.getElementById('size-12').onclick = size12;
document.getElementById('size-14').onclick = size14;
document.getElementById('size-16').onclick = size16;
function sizer(size) {
            document.body.style.fontSize = size + 'px';
          };

    document.getElementById('size-12').onclick = function(){sizer(12)};
    document.getElementById('size-14').onclick = function(){sizer(14)};
    document.getElementById('size-16').onclick = function(){sizer(16)};

在您的示例中,使
makeSizer()
返回函数意味着代码更少

function makeSizer(size) {
    return function() {
        document.body.style.fontSize = size + 'px';
    };
}

document.getElementById('size-12').onclick = makeSizer(12);
document.getElementById('size-14').onclick = makeSizer(14);
document.getElementById('size-16').onclick = makeSizer(16);
vs


您可以使用闭包执行多种操作。关于您的问题:闭包用于设置一个部分函数。当Curry出现在场景中时,此技术用于函数编程。curry表示在每个参数传递并返回结果后调用函数。主要是部分函数,但当传递所有参数时,它将返回最终值。这正是你假装通过显式返回一个新函数来实现的技术

为什么它有用?这是一种函数式编程技术,可以与面向对象编程中的分部类相比较

在某些情况下,这个概念是有用的。请阅读我在上的博客,了解部门内的示例

请记住,这是需要闭包的更多示例之一

我认为这个答案相当详细地解释了这个概念。 阅读本文后,我的理解是闭包是用来将函数作为第一类对象的。作为第一类对象的函数非常有用,因为它们可以像参数一样传递,并使某些事情变得非常简单


另外,使用闭包的另一个好处可能是,它们可以用于在JavaScript中使成员私有,如本文所述

到处都用。这就是语言的运作方式。没有特定的用例。@Neerav:不要介意所有这些onclick在技术上也是闭包事实是,如果函数不能被随意调用和传递,JS几乎不值得使用。我们又回到了糟糕的过去,传递一系列JS代码来解析和运行,或者类似的东西。这不是一个需要闭包的好例子。