Javascript研究心得总结
2010-09-14 13:42:10 来源:WEB开发网习惯于OOP语言编程后,会发现Javascript世 界有很多匪夷所思的奇奇怪怪的现象(比如闭包),我花了大量的精力研究这些奇怪现象的根源,最后发现:源自于javascript的作用域不是块级作用域,同时它有一套基于作用域链的标识查找机制。本文大部分内容来自互联网,经过整理、改进而成。
Javascript引擎和DOM采用的垃圾回收算法:引用计数
javascript和DOM有各自的垃圾回收器,单独运作良好,合作时一不小心会出问题。引用计数这个算法的缺陷就是:Javascript 对象和DOM对象彼此循环引用,造成彼此的引用计数永远不能为0,垃圾回收器无法正确回收这些参与循环引用的对象,最终造成内存泄漏(Memory Leak)。闭包是循环引用“大户”。
词法作用域(lexical scope,一般简称作用域)、with/eval
简单来说javascript的作用域是由function划分的。读完这篇文章你会了解词法作用域 Java S cript运 行机制浅探,with/eval这 两个特例会扰乱作用域,即所谓动态作用域(dynamic scope)
作用域链(Scope Chain) 和 标识查找机制
作用域链是一个链表(数据结构),它是Javascript的灵魂,只有理解了它才能理解Javascript世界奇奇怪怪的现象。作用域链由活动对象链成。
标识查找机制稍后结合函数执行的原理加以说明。
活动对象(call object)
国内很多人称之为调用对象(call object),本文用英文call obejct(但我私下认为翻译为"活动对象"更好,不至于和this所指的对象混淆。)
非常特殊的javascript引擎内的对象,ECMAScript规范术语称之为activation object(活动对象)。多个call object和全局对象组成作用域链(scope chain )
函数的本质(有名函数、匿名函数)、函数的[[scope]]属性 函数在javascript里面是一个特殊的引用类型 ,它继承于位于javascript世界最顶端的object,类型是Function,是其他常见引用类型的构造函数的所属类型。
Tags:Javascript 研究 心得
编辑录入:爽爽 [复制链接] [打 印]更多精彩
赞助商链接