美文网首页
什么是闭包

什么是闭包

作者: moyahuang | 来源:发表于2019-11-12 14:05 被阅读0次

本文原本上传于本人的博客,现复制过来。

什么叫闭包

对于闭包,MDN上的解释是这样的

A closure is the combination of a function bundled together (enclosed) with references to its surrounding state (the lexical environment). In other words, a closure gives you access to an outer function’s scope from an inner function. In JavaScript, closures are created every time a function is created, at function creation time.

也就是说,任何一个方法创建后,闭包就会被创建。一个闭包是一个函数和它的词法环境(即该方法创建时所处的作用域的所有资源)

要理解什么是闭包,先看下面两个例子:

例一:

function init() {
    var name = "Mozilla"; // name is a local variable created by init
    function displayName() { // displayName() is the inner function, a closure
        alert (name); // displayName() uses variable declared in the parent function    
    }
    displayName();    
}
init();

上述代码的效果不须我在这里赘言。函数displayName可以访问其外部函数的变量name,因此其弹出的警示框内容为name的值”mozilla"。

例二:

function makeFunc() {
  var name = 'Mozilla';
  function displayName() {
    alert(name);
  }
  return displayName;
}

var myFunc = makeFunc();
myFunc();

JS的闭包特性可以从上面这个栗子中得到体现。因为通常来说,方法调用后(makeFunc()),方法内创建的所有资源也会随之销毁。但是当方法displayName作为makeFunc的返回值被传递给myFunc后,我们发现调用myFunc的效果与例1相同。这里就足以说明在JS中,不仅是displayName方法本身被返回,其所在词法环境(我想说人话,但还是术语比较高效)也被返回,因此警示框仍正常提示“Mozilla”。

闭包的一些具体用例

【用例一】 调整网页字体大小
简书好像不能嵌入codepen代码,这里给一个链接https://codepen.io/moyahuang/pen/pooZXbw

参考资料
  1. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Closures

相关文章

  • 前端常见问题总结

    什么是闭包?闭包的用途是什么?闭包的缺点是什么? 什么是闭包 闭包:内部函数总是可以访问其所在的外部函数中声明的参...

  • python函数部分

    什么是闭包,闭包的常用用法,怎样判断是不是闭包,闭包的作用是 1、什么是闭包 2、常用用法 3、判断是不是闭包 4...

  • 闭包、call-apply-bind 的用法 、HTTP状态码

    一、什么是闭包?闭包的用途是什么?闭包的缺点是什么? 答 :1、什么是闭包:如果一个函数用到了外部的变量,那么这个...

  • Escaping Closures - Swift

    逃逸闭包和非逃逸闭包 逃逸闭包(escaping closure),什么是逃逸闭包?苹果官方给的定义是:当一个闭包...

  • 深入解析Javascript闭包及实现方法

    一、什么是闭包和闭包的几种写法和用法 1、什么是闭包 闭包,官方对闭包的解释是:一个拥有许多变量和绑定了这些变量的...

  • 面试题(day-2)

    1 ,什么是闭包?闭包有什么好处?使用闭包要注意什么? 闭包:函数嵌套函数,内部函数可以引用外部函数的参数和变量,...

  • 闭包,定时器

    问题 1.什么是闭包? 有什么作用 闭包(英语:Closure),又称词法闭包(Lexical Closure)或...

  • python函数之闭包

    目录 python函数之闭包什么是闭包python中的namespace闭包的条件闭包的优点 python函数之闭...

  • 再次学习 Swift 闭包

    Swift 闭包 1. 什么是闭包? 闭包是自包含的函数代码块,可以在代码中被传递和使用。 2. 闭包能做什么? ...

  • 前端面试题

    1 ,什么是闭包?闭包有什么好处?使用闭包要注意什么? 详情可参考:http://www.jianshu.com/...

网友评论

      本文标题:什么是闭包

      本文链接:https://www.haomeiwen.com/subject/zezfictx.html