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){}

hellocherry
0 声望0 粉丝

成为一名可靠的前端