chunchunlike

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::
第二章

js数据按存储位置可分为

直接变量  ;变量 第一种的引用 ;数组元素;对象成员。性能问题一般发生在后两种上。

---

作用域:函数是Function对象的一个实例,也是对象的一种。有一个[[ Scope ]]属性。

函数创建时 加入一个全局对象 Global object 包含this-window,window docuemnt navigator。

函数执行时 会创建一个运行时期上下文 ,每次执行时对象的上下文都是独一无二的,多次调用就多次创建。函数执行完毕,上下文销毁。

            上下文创建后会添加新的 活动对象 activation object,包括 this 局部变量 参数集合,这个新对象会推到作用域前端。上下文销毁时,activation object也会销毁。

          查找变量是由前端的 activeobjct 再找到 global object。如果要找的变量靠后,则影响性能。

---

解决办法 var变量保存 比如document在末端 会经常用 。用var 变量放在前端 var bd = docuemnt.body.

这样多次用docuemnt.body,只需要查找一次。

--

改变作用域, 作用域链前面 再添加对象。

比如with  --避免使用,因为对第二层对象的访问变了。 如果仅仅是提高性能 可用var bd = document;

---

try-catch中的catch;catch很有用不建议避免。

题外原则:try-catch不应用来解决js错误,如果知道错误会发生,那么应该修复代码,而不是catch处理。

妥协办法

try{

    do();

}catch(ex){

    docatch(ex); //!!委托给处理器方法。

}

---

个人感觉:闭包是在函数内 定义了一个函数 会有闭包。

外层函数执行时 创建闭包closure,为了闭包访问外层的id 必须有个特定的作用域链。

好吧 没看太清楚

---

原型

_proto_ ,最后绑定到Object的实例作为原型。

和标识符解析一样,对象成员的解析也是有开销的,原型链的遍历过程中,每深入一层都会增加性能的损失,于是

对象在原型链中存在的位置越深,找到它就越慢。

--

对象成员嵌套得越深,访问速度就会越慢例如window.location.href,每次遇到点操作符,该嵌套成员都会导致JavaScript 引擎搜索所有对象成员,例如执行location.href 总是要比window.location.href 要快。

当要频繁地访问对象成员时,最好用变量将它们缓存起来。

posted on 2011-07-29 00:05  chunchunlike  阅读(227)  评论(0)    收藏  举报