-6

これは質問の延長です。JavaScriptのスコープを理解するために以下のコードを試しました

var a = function(){
   var aa = 10;
   var x = 13;            
   b = function(){ c = function(){ alert(aa); }; };       
};
a();
b();
c();
alert(typeof x);​ // Undefined
alert(x);​ // Returned me 13.

私のクエリはvar、グローバル関数内で変数を宣言したことです。私の理解によると、xローカルでなければなりません。しかし、それはそのように行動しているわけではありません。誰かが私の疑いを晴らしてください...このフィドルをチェックしてください。

4

1 に答える 1

3

次のことが起こります。

aa=の値を表示するアラートがポップアップ表示されます10

グローバルスコープからundefined変数にアクセスしようとしているため、アラートがポップアップしますが、関数aのスコープでのみ定義されています。xx

コンソールにエラーが表示されましたReferenceError: x is not defined

したがって、x は確かにプライベートであり、グローバルにアクセスすることはできません。

おそらく何かを台無しにして、間違った結果が得られたのでしょう。

x場合によっては、関数スコープに制限されるのではなく、突然グローバルオブジェクトのメンバーになるvar の前に var を忘れた可能性があります。この場合、最後のアラートは 13 を返します。ただし、アラート (typeof x) はその場合を示します"number"

于 2012-07-18T13:52:27.617 に答える