高性能Javascript 数据访问读书笔记

数据的存储位置决定获取最佳的读写效率

直接量(字符串,数字,布尔值、对象、数组、函数、正则表达式,特殊的null,undefined)、变量 很快

数组元素 以数字索引

对象 字符串索引

管理作用域链

Scope 影响性能和功能

this的指向,函数能访问到的变量

作用域的工作原理

function 即一个对象,即Function 对象的一个实例

有一些可编辑的属性,还有一些供引擎存取的内部属性,其中一个属性是Scope

Scope 包含了一个函数被创建的作用域中对象的集合,这个集合被称为函数的作用域链,确定哪些数据能被函数访问,每个对象都被称为一个可变对象,以键值对形式存在,函数被创建时,会被创建此函数的作用域中的访问的数据对象所填充。

执行函数时会创建一个称为运行期上下文executing context的内部对象一个运行期上下文定义了一个函数执行时的环境,函数每次执行时对应的运行期上下文都是独一无二的,所以多次调用同一个函数会创建多个运行期上下文,函数执行完毕,执行期上下文就被销毁。

每个运行期上下文都有自己的作用域链,用于标识符解析,

运行期上下文的创建进程:

初始化为当前运行函数的Scope属性中所包含的对象,按照它们出现在函数中的顺序,被复制到上下文的作用域链中,一个被称为活动对象activation object的新对象就为执行期上下文创建好了,它包含了所有局部变量,命名参数,参数集合,以及this,此对象被插入作用域的,

每遇到一个变量,都会以历一次标识符解析过程以决定从哪里获或存数据,

标识符解析的性能

一个标识符所在的位置越深,读写速度就越慢,

读写局部变量是最快的,

读写全局变量是最慢的,它位于运行期上下文的最未端,

总结: 尽可能的使用局部变量,一个多次被引用的全局变量,可以用局部变量先得到