Javascript速度:范围或变量

Din*_*ler 2 javascript performance scope best-fit

以下两个代码示例(速度,最佳实践等)之间有区别吗?

这个:

function() {
    var me = this;
    me.doSomething();
    me.doAnotherThing();
};
Run Code Online (Sandbox Code Playgroud)

或这个:

function() {
    this.doSomething();
    this.doAnotherThing();
}
Run Code Online (Sandbox Code Playgroud)

如果我多次调用示波器,会有区别吗?我是使用变量还是只使用范围?

aym*_*met 5

在JavaScript中,范围是继承的.因此,当您想要从父作用域访问变量时,引擎将首先查看当前作用域,查看它是否存在,然后将在父作用域中搜索.它将一直持续到找到你所要求的为止.

this变量在本地范围内可用(实际上在激活对象中),引擎将能够立即解析它.因此,没有性能原因来缓存它.

但是,当您从父作用域访问变量时,这会变得很有趣.例如,假设您想document在函数中多次访问变量(来自全局范围).通过缓存它,引擎只需要解析一次,从而提高性能:

function foo() {
  var doc = document;

  doc.getElementsByTagName('body');
  doc.querySelectorAll('div');
}
Run Code Online (Sandbox Code Playgroud)

无论如何,截至今天,这作为一种理论方法更有趣,因为大多数现代JS引擎都能够很好地优化它(http://jsperf.com/scope-resolution-cached-not-cached).


范围继承是JavaScript语言的重要组成部分,我强烈推荐这两个读数以便更好地理解: