本文通过实际测试对比JavaScript中全局变量、函数内局部变量及常量表达式的执行效率。结果显示,局部变量访问速度显著优于全局变量;属性访问在Firefox和Safari中效率极低,而在Chrome、Opera和IE中与全局变量差异不大,暗示后三者可能将全局变量实现为全局对象属性。
<html> <body> </body> </html> JavaScript全局变量、局部变量与常量表达式性能对比
[Ctrl+A 全选 注:引入外部Js需再刷新一下页面才能执行]
注意:在IE中进行这个测试时需要先改变IE的"最大脚本步数":
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\Styles]
"MaxScriptStatements"=dword:ffffffff
从测试结果来看,使用函数内部的本地变量时,其执行效率远高于使用全局变量或常量表达式。相比之下,属性访问的效率表现非常糟糕,在Firefox和Safari浏览器中,其速度甚至比使用全局变量还要慢数倍。
直接使用字符串常量比访问全局变量要快,但创建正则表达式的操作却比使用全局变量慢很多。
观察数字类型的测试结果可以发现:在Google Chrome、Opera和IE浏览器中,使用属性访问与使用全局变量的性能差异不大(Opera的表现可能与其垃圾回收机制有关)。从这一现象推测,在这三种浏览器中,所谓的全局变量实际上可能就是全局对象的一个属性。