一直以为js的闭包只是内部函数保存了一份外部函数的变量值副本,但是以下代码打破了我的认识: 执行结果是10个10 而不是0-9 看了JS高级编程7.2.1之后才明白 变量i并不是存在于匿名函数的局部变量表,而是存储在createFunctions的活动对象表(存储参数和局部变量)中。并且在创建函数的 ...
分类:
Web程序 时间:
2016-11-05 20:53:27
阅读次数:
217
垃圾回收是什么? 垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,垃圾收集的目的在于清除不再使用的对象。GC通过确定对象是否被活动对象引用来确定是否收集该对象。GC首先要判断该对象是否是时候可以收集。两种常用的方法是引用计数和对象引用遍历。 怎么判断一个对象是否需要... ...
分类:
编程语言 时间:
2016-08-21 21:23:29
阅读次数:
191
7.2 闭包 定义: 闭包是指有权访问另一个函数作用域中的变量的函数. 理解闭包: 作用域链: 当某个函数被调用时,会创建一个执行环境以及相应的作用域链. 作用域链中,外部函数的活动对象始终处于第二位,外部函数的外部函数的活动对象处于第三位.....直至作为作用域链终点的全局执行环境 变量对象: 全 ...
分类:
编程语言 时间:
2016-08-20 15:55:30
阅读次数:
138
模仿块级作用域 Javascript中没有块级作用域的概念,这意味着在块语句中定义的变量,实际上是在包含函数中而非语句中创建的 在for循环中定义的局部变量i可以再for循环外访问,因为变量i是定义在outputNumbers()的活动对象中的,因此从它有定义开始,就可以在函数内部随处访问它。 遇到 ...
分类:
其他好文 时间:
2016-07-31 14:23:01
阅读次数:
138
闭包的三种经典用法: 1. 通过在函数中创建函数,并返回来延迟作用域链的存在时间(掌握执行环境/作用域链/this/活动对象/arguments/全局对象概念的理解) 2. 模仿块级作用域 (javascript不存在块级作用域) for(var i=0;i<10;i++){ alert(i); } ...
分类:
其他好文 时间:
2016-07-12 21:04:06
阅读次数:
155
垃圾收集GC(Garbage Collection)是Java语言的核心技术之一,之前我们曾专门探讨过Java 7新增的垃圾回收器G1的新特性,但在JVM的内部运行机制上看,Java的垃圾回收原理与机制并未改变。垃圾收集的目的在于清除不再使用的对象。GC通过确定对象是否被活动对象引用来确定是否收集该... ...
分类:
编程语言 时间:
2016-07-07 17:23:05
阅读次数:
169
内存泄漏 如果闭包的作用域链中保存着一个HTML元素,那么就意味着该元素将无法被销毁。 而这个闭包则又创建另一个循环引用。由于匿名函数保存了一个对 assignHandler()的活动对象的引用,因此就会导致无法减少 element 的引用数。只要匿名函数存在,element 的引用数至少也是1,因 ...
分类:
其他好文 时间:
2016-07-02 22:49:40
阅读次数:
242
闭包 在一个函数内部创建一个子函数,子函数可以访问父函数作用域中的变量。 活动对象:是在进入函数执行环境时创建的,它通过函数的arguments属性初始化 当函数被调用时,会创建一个执行环境及其相应的作用域链。使用 arguments 和其他命名参数的值来初始化函数的活动对象。在作用域链中,父函数的 ...
分类:
其他好文 时间:
2016-06-11 17:16:26
阅读次数:
180
JavaScript作用域链 之前写过一篇JavaScript 闭包究竟是什么的文章理解闭包,觉得写得很清晰,可以简单理解闭包产生原因,但看评论都在说了解了作用域链和活动对象才能真正理解闭包,起初不以为然,后来在跟公司同事交流的时候发现作用域和执行环境确实很重要,又很基础,对理解JavaScript ...
分类:
编程语言 时间:
2016-06-05 23:25:38
阅读次数:
402
每一个JavaScript函数都是Function对象的一个实例, 它有一个仅供JavaScript引擎存取的内部属性[[Scope]]. 这个[[Scope]]存储着一个作用域的集合, 这个集合就叫”作用域链”, 集合中存储着”可变对象”VO或”活动对象”AO(AO比VO多this和argumen ...
分类:
编程语言 时间:
2016-05-09 01:34:43
阅读次数:
221