2012-01-24 13 views
4

私は "var"なしで初期化された変数がグローバルになると聞いています。 so:javascriptグローバル変数スコープ

$(document).ready(function(){ 
     function foo(){ 
     //since i'm not using "var", will this function become global? 
     } 

     var bar = function(){ 
     //is this the better way to declare the function? 
     } 
}) 

グローバルの場合、なぜコンソールでアクセスできないのですか。それがグローバルではなく、スコープが関数にある場合、 "var"を省略するといくつかのパフォーマンスがかかりますか?ありがとう。

答えて

13

varなしで宣言された変数のみがグローバルになりますが、これは関数には適用されません。

あなたは、しかし、そのようなfooの宣言することができます:

foo = function() {} 

をし、それがグローバルでなければなりません。

varを省略することは一般的に(頭の上から)これらの理由からお勧めできません。

  • 可変解像度はほとんど地元から始まり、それが遅くなって、グローバル名前空間で探しに向かいます。特定のブラウザーではかなり遅くなります。
  • グローバル名前空間を汚染することによって、最終的に名前の競合が発生する傾向があります。最悪の犯罪者の一つは、あなたが選択しない場合、for(i = 0; i < arr.length; i++)が原因hoisting

    BTWと呼ばれる言語機能にあなたがvarを使用して関数を宣言することがあります

varの欠如に注意してください)、と言う、だろうvarで関数を宣言し、私はあなたがので、この方法を行うお勧めします。

​​

それは関数に「名前」を与える代わりに、DEBに役立ちます無名関数として処理されているので、 ugging。ほとんどの人はこれをしないで、functionを使って宣言します。

+3

+1は '... = function foo(){}'を使用しています。あなたはそのような名前を二重にすることができるか分からなかった。 –

関連する問題