私はvar
キーワードに関して非常に奇妙な(私にとって)問題に遭遇しました。私はそれをかなり最小限のテストケースに減らし、Node.js(つまり、V8とChrome)、Safari 4のインスペクター(つまり、Nitro)、およびFireBug(明らかに、SpiderMonkey)に展示されていることを発見しました。私はもともとバグレポートを作成していましたが、非常に広く表示されているため、JavaScriptが変数のスコープと検索をどのように行うのかを完全に誤解していると思います。
テストケースは非常に小さく、GitHubのhttp://gist.github.com/260067にあります。最初の例と2番目の例の唯一の違いは、var
キーワードが含まれていることです。
ここでも、同じ「問題」を別の方法で示す同様のテストケースがあります:https ://gist.github.com/698b977ee0de2f0ee54a
編集:カスケードスコープがどのように機能するかを説明しようとするこれ以上の回答を排除するために、私はそれをよく知っています。私の問題は、次のコードが「機能する」理由がわからないことです(つまり、alert()
「外部」、「内部」、「外部」の順になります)。
(function(){
var foo = 'outer';
alert("Outer `foo`: " + foo);
(function(){
foo = 'inner';
alert("Inner `foo`: " + foo);
var foo;
})();
alert("Outer `foo`: " + foo);
})();
;のvar foo;
再割り当てとはまったく関係のない位置で発生します。foo
では、なぜそれがその割り当てに非常に大きな影響を与えるのでしょうか。