美文网首页前端全栈开发
你有真正了解闭包吗?

你有真正了解闭包吗?

作者: a333661d6d6e | 来源:发表于2018-10-17 22:12 被阅读40次

JavaScript语言精粹对闭包是这样描述的:

首先列举了一个例子:

//创建一个名为 quo 的构造函数
 //它构造出带有 get_status 方法和 status 私有属性的一个对象
 var quo = function (status) {
 return {
 get_status:function () {
 return status;
 }
 };
 };
 //构造一个 quo 实例
 var myQuo = quo("amazed");
 document.writeln(myQuo.get_status());

这个 quo 函数被设计成无须再前面加上new 来使用, 所以名字也没有首字母大写。当我们调用 quo 时,它返回包含get_status 方法的一个新对象。该对象的一个引用保存在myQuo中。即使quo 已经返回了,但是get_status 方法仍然享有返回 quo 对象的 status 属性的特权。get_status 方法并不是访问该参数的一个副本,它访问的就是该参数本身。这是可能的,因为该函数可以访问它被创建时所处的上下文环境。这就是闭包。

image.png
                      1.闭包可以简单的理解为函数嵌套。
                    2.每一个函数都可以理解为闭包。
                   3.闭包不是一句话可以简单概括的。

闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数,仍以前面的 createComparisonFunction() 函数为例,注意加粗的代码。

function createComparisonFunction(propertyName) {
 return function (object1, object2) {
 var value1 = object1[propertyName];
 var value2 = object2[propertyName];
 
 if(value1 < value2){
 return -1;
 } else if(value1 > value2){
 return 1;
 } else {
 return 0;
 }
 };
 }

在这个例子中,突出的那两行代码是内部函数(一个匿名函数)中的代码,这两行代码访问了外部函数中的变量 propertyName 。即使这个内部函数被返回了,而且是在其他地方被调用了,,但它仍然可以访问变量 propertyName 。之所以还能够访问这个变量,是因为内部函数的作用域链中包含createComparisonFunction() 的作用域。要彻底搞清楚其中的细节,必须从理解函数被调用的时候都会发生什么入手。
本次给大家推荐一个免费的学习群,里面概括移动应用网站开发,css,html,webpack,vue node angular以及面试资源等。
对web开发技术感兴趣的同学,欢迎加入Q群:864305860,不管你是小白还是大牛我都欢迎,还有大牛整理的一套高效率学习路线和教程与您免费分享,同时每天更新视频资料。
最后,祝大家早日学有所成,拿到满意offer,快速升职加薪,走上人生巅峰。

相关文章

  • 你有真正了解闭包吗?

    JavaScript语言精粹对闭包是这样描述的: 首先列举了一个例子: 这个 quo 函数被设计成无须再前面加上n...

  • 闭包、原型、原型链【前端面试问题(一)】

    一、闭包 什么是闭包?闭包你了解吗? 闭包就是能够读取其他函数内部变量的函数。 通俗一点呢? 通俗的讲就是函数a的...

  • 闭包你真的了解吗?

    开始之前 这是回北京后被疫情困在家的第四周了,在弹尽粮绝和刚刚看完《十二道锋味》芬兰之旅,还沉浸在奇幻的极光和诱人...

  • js题

    1.闭包的理解,闭包的原理,那些地方会用到,闭包的缺点2.跨域的方式(jsonp,cors),对跨域了解吗,jso...

  • JavaScript 作用域闭包

    作用域闭包 启示 对于那些有一点 JavaScript 使用经验但未真正理解闭包概念的人来说,理解闭包可以看作是某...

  • 前端技术

    js的闭包了解吗? 闭包就是能够读取其他函数内部变量的函数。 闭包会使得函数中的变量都被保存在内存中,内存消耗很大...

  • Block

    要了解Block需要先了解什么是“闭包性” 2.3 闭包性 上文说过,block实际是Objc对闭包的实现。 我们...

  • web前端必知篇:闭包的理解

    闭包这玩意,在面试的时候经常被问到。如果你还不了解,小编就简单的讲解一下! 闭包是什么,闭包的优点是什么? 闭包就...

  • java,kotlin,dart闭包

    java闭包 kotlin闭包 dart闭包 了解不同语言之间的相同和不同。学习和进步。

  • 搞懂闭包JavaScript的GC机制

    最近在学习闭包,想要真正了解闭包是怎么运行的,于是就遇见了JavaScript的GC机制,不知道这个机制,就不可能...

网友评论

    本文标题:你有真正了解闭包吗?

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