howieyi

No pains, No gains!

View project on GitHub

高性能JavaScript - 数据存取

计算机科学中有一个经典问题是通过改变数据的存储位置来获得最佳的读写性能,数据存储的位置关系到代码执行过程中数据的检索速度。

JavaScript中数据存储位置

  • 字面量,只代表本身,不存储在特定位置。例如,字符串数字布尔值对象数组函数正则表达式,以及特殊的 nullundefined
  • 本地变量,var关键字定义的数据存储单元;
  • 数组元素,存储在JavaScript数组对象内部,以数字作为索引;
  • 对象成员,存储在JavaScript对象内部,以字符串作为索引

作用域

作用域概念是理解JavaScript的关键,不仅从性能的角度,还从功能的角度。作用域对JavaScript有很多影响,从确定哪些变量可以访问,到确定this的赋值。JavaScript作用域同样关系到性能,要理解速度和作用域的关系,首先要正确的理解作用域的工作原理

  • [[scope]]仅供JavaScript引擎存取的内部属性之一,它包含了一个函数被创建的作用域中的对象的集合。这个集合被称为作用域链,它觉得哪些数据能被函数访问。
  • 作用域中每个对象被称为可变对象,“键值对”形式存在。
  • 当一个函数创建后,它的作用域链会被创建此函数的作用域中可访问的数据对象所填充。