javascript中有四种基本的数据存取位置:字面量、变量、数组元素、对象成员。
1.访问字面量和局部变量的速度最快,访问数组元素和对象成员相对较慢。
2.变量在作用域链中的位置越深,访问所需时间越长。
-局部变量位于作用域链的起始位置,因此访问速度最快;
-全局变量位于作用域链的最末端,因此访问速度最慢。
3.with语句和try-catch中的catch子句可以改变执行环境的作用域链,有时会增加访问代价,应小心使用。
-with(A)会创建一个变量对象推入作用域链的首位,这个变量对象拥有A对象的所有属性
function initUI(){
width(document){//虽然避免了多次书写document,但是其他局部变量(如i)处于作用域链的第二个对象中
let bd = body,
links = getElementsByTagName('a'),
i=0,
len = links.length
//其他代码
}
}
-catch()子句会把异常对象推入作用域链的首位,catch代码块内部访问的所有局部变量会被放到作用域链的第二个对象中。
4.嵌套的对象成员会明显影响性能,尽量少用。
如执行时间:location.href < window.location.href < window.location.href.toString()
5.就对象及对象原型来说,属性或方法在原型链中的位置越深,访问它的速度越慢。
如访问时间:实例属性 < 第一层原型属性 < 第二层原型属性
6.在同一个函数中没必要多次读取同一个对象成员,建议第一次查询到值后就将其存储在局部变量中。
//bad
if(objecA.attr === 1 || objecA.attr === 2 || objecA.attr === 3){}
//good
const { attr } = objecA
if(attr === 1 || attr === 2 || attr === 3){}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。