高性能Javascript 数据访问读书笔记
数据的存储位置决定获取最佳的读写效率
直接量(字符串,数字,布尔值、对象、数组、函数、正则表达式,特殊的null,undefined)、变量 很快
数组元素 以数字索引
对象 字符串索引
管理作用域链
Scope 影响性能和功能
this的指向,函数能访问到的变量
作用域的工作原理
function 即一个对象,即Function 对象的一个实例
有一些可编辑的属性,还有一些供引擎存取的内部属性,其中一个属性是Scope
Scope 包含了一个函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,确定哪些数据能被函数访问,每个对象都被称为一个可变对象,以键值对形式存在,函数被创建时,会被创建此函数的作用域中的访问的数据对象所填充。
执行函数时会创建一个称为运行期上下文executing context的内部对象一个运行期上下文定义了一个函数执行时的环境,函数每次执行时对应的运行期上下文都是独一无二的,所以多次调用同一个函数会创建多个运行期上下文,函数执行完毕,执行期上下文就被销毁。
每个运行期上下文都有自己的作用域链,用于标识符解析,
运行期上下文的创建进程:
初始化为当前运行函数的Scope属性中所包含的对象,按照它们出现在函数中的顺序,被复制到上下文的作用域链中,一个被称为活动对象activation object的新对象就为执行期上下文创建好了,它包含了所有局部变量,命名参数,参数集合,以及this,此对象被插入作用域的,
每遇到一个变量,都会以历一次标识符解析过程以决定从哪里获或存数据,
标识符解析的性能
一个标识符所在的位置越深,读写速度就越慢,
读写局部变量是最快的,
读写全局变量是最慢的,它位于运行期上下文的最未端,
总结: 尽可能的使用局部变量,一个多次被引用的全局变量,可以用局部变量先得到