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