1つの関数が別の関数のローカル変数を変更していますか?

私はいくつかのJavaScript関数に問題がありました。私には、よく知られている警告()が私を驚かせるものを明らかにするまで、約1時間頭を撫でていました。 1つの関数が別の関数のローカル変数を変更していたようです。私は簡単なテストスクリプトを書いた:

function first() {
    msg = "1111";

    second();

    alert(msg);
    }


function second() {
    msg = "2222";
    }

私が最初に()を呼び出すと、 "1111"という警告ボックスが表示されますが、代わりに "2222"が表示されます。 second()がfirst()に属するローカル変数にどのような影響を与えていますか?私は何かを見逃しているのですか、これはバグですか?

私はFirefox 12.0を使用しています。

3
developer.mozilla.org/ja/JavaScript/Guide/… (JavaScriptが初めての方はガイド全体を読む価値があります)
追加された 著者 Felix Kling,
関数内には var msg ... のないローカルではありません。
追加された 著者 Jared Farrish,
以前は可変スコープで混乱していましたが、その後、私は閉鎖のスコープを閉じて愛しましたをご覧ください。
追加された 著者 Jared Farrish,

1 答え

この変数は、varステートメントが使用されている場合にのみローカルです。

var msg = "1111";

それ以外の場合、値はグローバルスコープにエスケープされます。

5
追加された
不安定ではありませんが、 "1111" "2222" もちょっと奇妙です。
追加された 著者 Jared Farrish,
変数を宣言するために var がないと考えると、変数がグローバルスコープに存在するものとみなします。
追加された 著者 matt3141,
ハハ、JavaScriptを使って数年のうちに(私は仕事のためではなく趣味のためにやっています)これは今まで私を完全に避けていました。 msg = ... の前に var を置いて、期待どおりに動作します。ありがとう!
追加された 著者 Iain,
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript