2016-07-12 46 views
1
var globalObject = { x: 0 }; // some global object with 'x' property 

function Object() 
{ 
    this.x = 0; 
} 

Object.prototype.TestPerformance = function() 
{ 
    var xVar = 0; 
} 

從函數TestPerformance,這些屬性/變量的訪問時間的順序是什麼?JavaScript性能:訪問時間的屬性 - 'this'與'全局對象'vs'變量'

this.x VS globalObject.x VS xVar

+0

是'x'在'this.x'情況下,自己的財產? – Oriol

+1

你爲什麼想知道? (只是爲了給你一個更好的答案) – mostruash

+2

你是什麼意思的「秩序」?如果你想要數字,你必須測量(關於你正在使用的確切實現) – Bergi

回答

2

將是執行相關的,是不看引擎源不可知。

但最好近似:

this.x 

O(1)時間/複雜

globalObject.x 

O(1)時間/複雜

假設LexicalEnvironments在編譯時搜索。

var xVar 

O(1)時間/複雜

+0

LexicalEnvironment通常不需要搜索,可以靜態確定標識符'globalObject'引用全局變量。然而,訪問和搜索全球範圍是另一回事。 O(1)平均值爲 – Bergi

+1

。在最壞的情況下,哈希表可能是O(n)。 – Oriol

+0

@Bergi你可以解釋爲什麼範圍鏈不必搜索變量「globalObject」,而是可以靜態確定? – Ben