以前因为技术太low(虽然现在也还是low),也不敢写些什么博文,最近在进阶JavaScript面向对象方面的知识,对闭包又深入了解了一点点,加上我看过的一些博文对于闭包的讲解一般都是直接开始讲闭包,对于作用域链等都没有讲,这样让新手们还是有点难理解。

一下是个人浅薄的见解:

首先,作用域链,就是一条链。。。。。比如  全局——函数funA——函数funA里面的函数funB,换成js的说法就是一种层级关系,由父代向子代一层一层的连接起来,就是一条作用域链。

作用域链的作用,就是在子代中可以运用父代的变量,比如在最里层的函数funB,他可以运用在自己里面创建的变量funB_v,也可以运用父代函数funA里面创建的变量funA_v,还可以运用全局环境下创建的gobalA.

在funA里面,可以调用自身环境创建的funA_v和gobalA,但是不可以用子代创建的funA_v。

然后再全局环境不能调用函数里面的变量。

好了,作用域链讲完了,让我们来看看闭包。

每次调用完函数呢,函数里面的变量也就被释放掉了,被垃圾回收。而闭包的原理就是保留住这条可以由子代访问父代变量的作用域链,并且把这条作用域链给一个变量储存起来。这样就不会被当做垃圾回收。

比如下面这样:

在函数funB里面有return funA_v的这一条作用域链,然后在函数funA里面有一条

返回funB函数体的语句,当我们funA()的同时,也把funB的一个引用给了keeper,

让我们来console.log(keeper)看看可以返回些什么?

返回了funB的函数体,当我们keeper()的时候等同于funB(),也就会成功的

return funA_v,但是记住,keeper()是一个全局变量。

也就是说我们成功的在全局环境下访问到了函数内部的数据,这就是闭包的作用。

至于闭包可以做什么把,目前我觉得比较有用的就是做黑盒函数(简单来说就是,你不知道函数里面有什么的函数),对函数内部进行保护,不能直接访问函数内部的某个变量,但是可以对他的值进行修改,或者是获取

处女作,谈谈JavaScript里面的闭包吧!相关推荐

  1. 让你分分钟学会Javascript中的闭包

    Javascript中的闭包 前面的话: 闭包,是 javascript 中重要的一个概念,对于初学者来讲,闭包是一个特别抽象的概念,特别是ECMA规范给的定义,如果没有实战经验,你很难从定义去理解它 ...

  2. 深入理解javascript原型和闭包(16)——完结

    之前一共用15篇文章,把javascript的原型和闭包. 首先,javascript本来就"不容易学".不是说它有多难,而是学习它的人,往往都是在学会了其他语言之后,又学java ...

  3. 深入理解javascript原型和闭包(17)——补this

    本文对<深入理解javascript原型和闭包(10)--this>一篇进行补充,原文链接:http://www.cnblogs.com/wangfupeng1988/p/3988422. ...

  4. 深入理解javascript原型和闭包(3)——prototype原型

    既typeof之后的另一位老朋友! prototype也是我们的老朋友,即使不了解的人,也应该都听过它的大名.如果它还是您的新朋友,我估计您也是javascript的新朋友. 在咱们的第一节(深入理解 ...

  5. [译]Javascript中的闭包(closures)

    本文翻译youtube上的up主kudvenkat的javascript tutorial播放单 源地址在此: https://www.youtube.com/watch?v=PMsVM7rjupU& ...

  6. 【进阶2-3期】JavaScript深入之闭包面试题解

    (关注福利,关注本公众号回复[资料]领取优质前端视频,包括Vue.React.Node源码和实战.面试指导) 本周正式开始前端进阶的第二期,本周的主题是作用域闭包,今天是第8天. 本计划一共28期,每 ...

  7. 也谈谈Javascript中的几个怪异特性(上)

    2019独角兽企业重金招聘Python工程师标准>>> Andy Croxall在Ten Oddities And Secrets About JavaScript罗列了他认为的10 ...

  8. 【javascript笔记】关于javascript中的闭包

    最开始看<javascript高级程序设计>的时候就看到了javascript中的闭包,在第七章第二节....好大概知道了,过了段时间,好了又忘了... 我们来看这本书里面关于闭包是怎么描 ...

  9. 解析面试常问题之JavaScript中的闭包概念及应用,顺便普及一下大家口中常说的内存泄漏问题

    JavaScript中的闭包是一个面试中经常被考到的问题,大家可能都对这个概念多多少少都有一些模糊的概念或者一点都不了解,那么今天就来给大家讲解一下. 公众号:前端印象 不定时有送书活动,记得关注~ ...

最新文章

  1. python零基础怎么学-编程零基础应当如何开始学习 Python?
  2. gcc 常用命令(逐渐完善)
  3. 蘋果iPhone 3G S更出色
  4. java magic number_Magic Number
  5. java的int、char、long、float、double对byte的转换,在通信的时候会用到
  6. 中石油在意大利加油站0.5分/升,会不会赔死啊?
  7. 计算机 管理 被停用,如果电脑上出现“你的账户已被停用请向系统管理员咨询”怎么办?...
  8. 104.二叉树的最大深度 (力扣leetcode) 博主可答疑该问题
  9. c语言for循环计算100以内奇数的和
  10. 联想e550笔记本怎么样_摄像头是亮点 — Lenovo 联想 ThinkPad E550C 笔记本 简单评测...
  11. DCDC开关电源的阶跃响应和动态响应(Load Transient)的区别
  12. windows上EndNote的安装和使用,使用报错“服务器运行失败”
  13. 数据驱动业务,说的好听,做好很难!得这样才行
  14. python-urllib3
  15. c语言中handle的用法,handle什么意思_handle的用法和短语例句
  16. 解决Maven打包报错:Failed to clean project: Failed to delete
  17. ie退出全屏快捷键_IE浏览器快捷键,IE浏览器全屏快捷键
  18. linux定时启动服务
  19. 58同城 反爬虫机制及处理
  20. python中元组的定义与如何创建元组

热门文章

  1. 什么是c语言程序的真值表,真值表(C++)
  2. 遇到税控盘共享多人使用的问题怎么解决
  3. 个人总结面试笔试C语言、嵌入式相关基础知识点
  4. 上海计算机等级考试一级题库软件,‎计算机等级考试一级最新题库 App Storessa...
  5. FastClick 填坑及源码解析
  6. Apple Silicon M1 Mac如何恢复出厂设置
  7. 华为正式发布鸿蒙手机可以升级吗,华为鸿蒙OS将于6月2日发布,大批华为荣耀手机可升级,终于等到了...
  8. 排球比赛--Python实现
  9. pink老师前端入门视频教程笔记(中)
  10. Python解压rar 文件