私はJavascriptが初めてで、関数宣言の仕組みに混乱しました。私はそれについていくつかのテストを行い、いくつかの興味深い結果を得ました:
say();
function say()
{
alert("say");
}
前方宣言が機能し、ポップアップが「言う」
反対側に
say();
say = function()
{
alert("say");
}
関数オブジェクトも宣言しましたが、機能しませんでした
関数を宣言し、後で再宣言すると、次のようになります。
function say()
{
alert("speak");
}
say();
function say()
{
alert("say");
}
「話す」ではなく「言う」をもらいました。それは驚きです!
わかった。最新の関数宣言だけが動くようです。次に、最初に関数オブジェクトを宣言し、次に「通常の」関数を宣言します。
say = function()
{
alert("speak");
}
say();
function say()
{
alert("say");
}
say();
もう一つ驚いたのは、「speak」に続いて「speak」だったことです。「通常の」関数宣言はまったく機能しませんでした!
それらすべての説明はありますか?そして、「通常の」関数宣言が本当に「脆弱」であり、同じ名前の関数オブジェクトによって簡単にオーバーライドできる場合、それを避けるべきですか?
もう 1 つの質問は、関数オブジェクト形式だけでは、その前方宣言は不可能になるのでしょうか? Javascriptでそれを「シミュレート」する方法はありますか?