私は、次のコードを実行しているから、奇妙な結果を経験しています:自己呼び出しの無名関数の直上に置かれたときに関数が変数に代入されるのはなぜですか?
var saySomethingElse, v;
// This function will not run when the nameless function runs, even if v and saySomethingElse are commented out.
function saySomething() {
alert("something");
}
// When v is uncommented, this function will run when the nameless function below runs..
saySomethingElse = function() {
alert("something else");
}
//v = "by uncommenting me, saySomethingElse will no longer be called.";
(function() {
if (v) {
alert("Now things are working normally.")
}
alert("This alert doesn't happen if v is commented out.");
})();
このコードが実行されると、一番下の無名関数ではなく、独自のコンテンツのsaySomethingElse
を呼び出しますが、v
がコメント解除された場合に予想されるように、すべての作品:saySomethingElse
は実行されず、無名関数は独自のコンテンツを実行します。私はこれがおそらく正常な動作だと思っていますが、私は説明を探しています。誰がなぜこれが起こっているのか知っていますか?
がフィドルをチェックアウト:working example
コンソールを使用する方法を学ぶのがよいでしょう –