在程序设计中,数据的存取速度是程序性能体现的重要特征,同样,在JavaSrcipt中研究数据的存取机制,不仅对于JS性能,而且对于JS的原理理解十分必要。
1. JavaSrcipt的数据存储位置
JavaScript有4种数据的存储位置,通过对于不同存储位置数据存取速度的对比,能够使我们在JavaScript程序设计时,优先使用性能高的存储位置形式,以达到JavaScript存取性能的最大化
在JavaScript中有4种数据的存储位置,如下:
1)字面量
字面量只代表自身,不存储在特定的位置,包括:字符串,数字,布尔,对象,数组,函数,正则表达式和null,undefined
2)本地变量
使用var定义的数据存储单元
3)数组元素
存储在js数组对象内部,并且以数字作为索引
4)对象成员
存储在js对象内部,以字符串作为索引
那么四种变量,谁读取效率最高?
在存取数据性能方面:字面量和本地变量>数组元素和对象元素
所以除非必须使用数组和对象,在一般情况下建议使用字面量和本地对象。
2.作用域和作用域链
作用域和作用域链是JavaScript中的关键概念,在性能和功能上,都有很大的影响,理解了作用域和作用域链,那个关于函数访问时,那些变量会被访问到;this的内存赋值等问题都会迎刃而解。
1)什么是作用域?
在JavaScript中,作用域就是定义一套规则,这套规则用来管理引擎如何在当前作用域以及嵌套的子作用域中根据标识符名称进行变量查找
这里的标识符,指的是变量名或者函数名
① 全局作用域
在任何代码中都能够访问的就是全局作用域:
- 最外层函数和最外层函数外面定义的变量
- 所有未定义直接赋值的变量
- 所有window对象的属性
② 局部作用域
只有在固定的代码片段才能访问到的作用域:
function x(){
var y = 1;//局部作用域
}
alert(y)//外面访问不到
2)什么是作用域链?
当代码在一个环境中执行时,会创建变量对象的一个作用域链。作用域链的用途是保证对执行环境有权访问的所有变量和函数的有序访问
①执行上下文[Execution context]
在JavaScript中有三种代码运行环境:
- Glo