最新のブラウザーでは、おそらくローカル変数とグローバル変数の間にパフォーマンスの違いはほとんどありません。
ただし、メモリ消費には問題があります。グローバル変数は、ページが開いている限り保持されますが、ローカル変数は、コントロールがスコープを離れた後にガベージ コレクションされます。ローカル変数を使用すると、メモリ リークが発生する可能性が低くなります。
アップデート
コメント スレッドでの長い議論の結果、テスト スクリプトを作成して、グローバル スコープ アクセスとローカル スコープ アクセスの実行速度の違いを測定するようになりました。
最初は違いがないように見え、結果はさまざまで、どちらか一方に特定の好みはありませんでした. ただし、@DaveNewton は、ローカル変数のパフォーマンスが桁違いに優れていることを一貫して示す反例を提供しました。
Firefox 7
20000 回のグローバル アクセスに使用されたミリ秒: 132
20000 ローカル アクセスに使用されるミリ秒: 159
Internet Explorer9
20000 回のグローバル アクセスに使用されるミリ秒: 1750
20000 ローカル アクセスに使用されるミリ秒: 1699
Google Chrome 14
20000 回のグローバル アクセスに使用されたミリ秒: 46
20000 ローカル アクセスに使用されるミリ秒: 55
テストスクリプト自体
<html>
<head>
<script type="text/javascript">
function t() {
var test = function () {}
test.issue = new String("hello");
var start = new Date().getTime();
(function() {
(function() {
(function() {
(function() {
(function() {
(function() {
(function() {
var a = document.getElementById("a");
for (var i = 0; i < 20000; i++) {
a.innerHTML = test.issue.toString();
}
a = null;
})();
})();
})();
})();
})();
})();
})();
var stop = new Date().getTime();
document.getElementById("a").innerHTML = "Milliseconds used for 20000 global accesses: " + (stop - start);
var start = new Date().getTime();
(function() {
(function() {
(function() {
(function() {
(function() {
(function() {
(function() {
var c = document.getElementById("c");
var testx = {};
testx.issue = new String("hello");
for (var i = 0; i < 20000; i++) {
c.innerHTML = testx.issue.toString();
}
c = null;
})();
})();
})();
})();
})();
})();
})();
var stop = new Date().getTime();
document.getElementById("c").innerHTML = "Milliseconds used for 20000 local accesses: " + (stop - start);
}
window.onload = function () {
document.getElementById('b').onclick = t;
}
</script>
</head>
<body>
<div align="center"><button id="b">Run Test</button></div>
<div id="a"></div>
<div id="c"></div>
</body>
</html>
ローカル変数へのより高速なアクセスを示す反例。
var t0 = new Date();
var i;
for (i=0; i<10000000; i++);
var t1 = new Date();
function count() { for (var i=0; i<10000000; i++); }
var t2 = new Date();
count();
var t3 = new Date();
d = document;
d.write('Without local variables = ', t1-t0, '<br />');
d.write('With local variables = ', t3-t2, '<br />');