侯体宗的博客
  • 首页
  • Hyperf版
  • beego仿版
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

《Javascript高级程序设计(第3版)》闭包理解

Java  /  管理员 发布于 2年前   78

“闭包是指有权访问另一个函数作用域中的变量的函数。”--《Javascript高级程序设计(第3版)》

 

      看以下代码:

<script type="text/javascript">    function outer() {        var i = 10;        return function() {            return i++;        }    }       var inner = outer();    var str = "";    for (var i=0;i<5;i++) {        str += inner()+" ";    }    document.write(str);</script>

      结果:10 11 12 13 14

 

      认为闭包是一个现象,是内部函数(function() {return i++})引用了外部函数(outer)的变量(i),且被返回到外部去(var inner = outer()),导致外部函数的执行环境没被释放(i的值得以保存)的现象。

 

      看到那句话的时候,才意识到自己的理解是错误的。上述现象是闭包的特性、现象,这种奇特的现象,可以通过结合作用域链、垃圾收集的知识点得到解释。

 

      现在更新下知识:闭包是一个函数。我们可以通过判断该函数是否能够访问其他函数作用域中的变量、函数来判断一个函数是不是一个闭包。

 

       提出疑问:当一个函数有权限但没有访问其可访问的其他函数的变量、函数时,它还是一个闭包吗?如果根据书中的定义,那么答案是肯定的。

      如下面的代码:

<script type="text/javascript">    function demo1(name){        this.getName = function() {            return name;        }    }       var inst  =  new demo1("Lcllao");    alert(inst.getName());//这个应该是了,通过new方式执行函数test,返回了当时的this对象。通过getName访问当时作用域上的name变量。    demo1("Lcllao");//在这个时候,上面的匿名函数是闭包吗?       function demo2() {        var i = 0;        return function() {//按照上述定义,这个匿名函数应该也是一个闭包。他有权但没访问demo2的变量i。            return "";        }    }</script>

 


  • 上一条:
    JAVA的getBytes()方法
    下一条:
    网络编程基础篇之JavaScript-学习笔记
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • TP(3/5)
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • java 正则表达式基础,实例学习资料收集大全 原创(0个评论)
    • java正则表达式彻底研究(0个评论)
    • java正则表达式验证函数(0个评论)
    • MVC、MVP和MVVM分别是什么(0个评论)
    • java 单例模式(饿汉模式与懒汉模式)(0个评论)
    • 近期文章
    • php语言中检测及转换文件字符编码函数介绍(0个评论)
    • laravel中轻量化的钱包实现方案:Laravel Wallet(0个评论)
    • mysql性能优化之8种常见SQL错误用法(0个评论)
    • Laravel 9.13版本发布(0个评论)
    • beego+GeoLite2免费数据库获取ip地址经纬度等定位归属信息(0个评论)
    • redis安全配置之修改端口、添加密码流程步骤及启动使用(0个评论)
    • PHP + Memcache实现简单的统计当前在线人数功能(0个评论)
    • Thinkphp5.1框架中实现Session+Redis会话共享流程步骤(0个评论)
    • go语言中使用Signbit()函数判断一个整数是正数或负数(0个评论)
    • 删库跑路之一链家程序员删除公司9TB数据被判7年,望各大码农警之!(0个评论)
    • 近期评论
    • 阿凡达123 在

      golang 怎么做热更新中评论 也可以看看这个:https://github.com/edwingeng/hot..
    • 博主 在

      hyperf框架常用命令-在centos7中退出命令及在docker容器中退出命令中评论 @路过的靓仔:cdn静态资源被墙,已修复..
    • GGGGGGGGG 在

      layui框架常用输入框介绍中评论 写的很好解决问题..
    • 路过的靓仔 在

      hyperf框架常用命令-在centos7中退出命令及在docker容器中退出命令中评论 剩下好多 wait 状态的..
    • 激光豆芽 在

      为什么你不能安逸?国内996为什么没有国外955香?中评论 国内现在无意义的内卷太多了..
    • 2016-11
    • 2018-03
    • 2020-03
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客