2012-03-16 6 views
0

JavaScriptの関数のポイントの1つがスコープを提供することだと思いました。関数内で定義されたものは、関数内でのみ使用可能でした。javascriptの関数スコープ

function cat(name) { 
    talk = function() { 
     alert(" say meeow!") 
    } 
} 

talk() 

私は話が見えてはならないので、上記のコードは倒れることを期待します。しかし、それはなぜですか?

+0

変数のデフォルトに前の質問で説明したように、宣言していないときのグローバルスコープhttp://stackoverflow.com/questions/9745069/not-a-function – Guffa

答えて

4

varキーワードで宣言しなかったためです。

キーワードvarを使用しない場合は、グローバルスコープになります。あなたがvarを使用する場合、それは、関数のスコープになります。

function cat(name) { 
    //anonymous function assigned to the local variable talk 
    var talk = function() { 
    alert(" say meeow!") 
    }; 
} 

あなたはvarキーワードなしという名前の関数を宣言することができ、そして、彼らはまだローカルスコープになります。

function cat(name) { 
    //local talk function 
    function talk() { 
    alert(" say meeow!") 
    }; 
} 
2

実際には、どのスコープでも変数を定義していません。そのため、グローバルスコープがデフォルトになります。 JavaScriptは、あなたがそれらを定義せずに変数を使用することができます

function cat(name) { 
    var talk = function() { // <-- added var 
     alert(" say meeow!") 
    } 
} 

talk() // fail 

が、これはプログラミング言語の習得がより容易かつ柔軟になります。私はこの機能を使用することをお勧めしません。常に変数を定義してください。

2

関数内では、変数を "var"で宣言するか、グローバルに宣言しなければなりません。