Javascript 为什么分配给变量的函数直接放在自调用匿名函数的上方执行?

Javascript 为什么分配给变量的函数直接放在自调用匿名函数的上方执行?,javascript,function,scope,Javascript,Function,Scope,运行以下代码时,我遇到一个奇怪的结果: 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 functio

运行以下代码时,我遇到一个奇怪的结果:

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不执行,匿名函数执行它自己的内容。我想这可能是正常的行为,但我正在寻找一个解释。有人知道为什么会这样吗


查看小提琴:

您需要在匿名函数saySomethingElse的末尾添加分号

您应该始终使用分号正确地结束匿名函数。没有必要使用分号来结束普通的非匿名函数fooBar{}函数

var saySomethingElse,v; //当无名函数运行时,即使v和saySomethingElse被注释掉,该函数也不会运行。 你说什么{ 警惕某事;
}//学习如何使用控制台会对你有好处,这太令人恼火了。我只是花了那么多时间来寻找一个遗漏的分号。不过,感谢您的及时回复。