1

Pro JavaScript with Mootools book で、以下の行を見つけました

The scoping rules for function expressions are a bit different from function 
declarations because they depend on variable scoping. Remember that in 
JavaScript, the var keyword defines a variable to be scoped locally, and 
omitting the keyword creates a global variable instead:    

私の理解によれば、私は以下のコードを書き、これをチェックしようとしました

var a = function(){ 
   b = function(){ c = function(){ alert("b"); }; };
};
alert(typeof a); // Returned me 'function'
alert(typeof b); // Returned me 'undefined'
alert(typeof c); // Returned me 'undefined'

そして、私も以下を試しました

var a = function(){ 
   var b = function(){ c = function(){ alert("b"); }; };
};
alert(typeof a); // Returned me 'function'
alert(typeof b); // Returned me 'undefined'
alert(typeof c); // Returned me 'undefined'​​

私がよりよく理解できるように、これを説明していただけませんか。コードの最初のブロックでの私の理解によると、 b と c はグローバル変数である必要があります..しかし、これはこの場合には起こりません。a()私もアラートの前に呼び出そうとしました...ここにフィドルがあります。スコープをよりよく理解するために、これについて私を助けてください。

4

2 に答える 2

6

コードの最初のブロックでの私の理解によると、bとcはグローバル変数でなければなりません

それらはそうですが、がa呼び出されるまで(およびb、の場合はが呼び出されるまで)、値が割り当てられませんc

これがフィドルです

そのコードは異なります。がありますvar b。これはb、グローバルではなくローカル変数になります。


var a = function(){ 
   b = function(){ c = function(){ alert("b"); }; };
};
a();
b();
alert(typeof a); 
alert(typeof b); 
alert(typeof c); 
于 2012-07-18T11:34:26.220 に答える
-1

以下のキーワードを Google で検索してください。スコーピングやその他の JavaScript パターン手法を習得するのに適した場所です。12部構成の連載記事です。Web サイトには直接リンクがないため、部品番号を使用して残りの記事を検索する必要があります。

  検索する
   
    エレガントなコードの基本的な JavaScript パート 1
    エレガントなコードの基本的な JavaScript パート 2
    等...
  
于 2012-07-18T12:38:02.427 に答える