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 要快。
当要频繁地访问对象成员时,最好用变量将它们缓存起来。

浙公网安备 33010602011771号