1. ホーム
  2. javascript

[解決済み] JavaScriptの関数に名前を付けて、すぐに実行することはできますか?

2022-12-16 03:25:43

質問

結構な数があるのですが。

function addEventsAndStuff() {
  // bla bla
}
addEventsAndStuff();

function sendStuffToServer() {
  // send stuff
  // get HTML in response
  // replace DOM
  // add events:
  addEventsAndStuff();
}

DOM が変更されたため、以前に添付されたイベントがなくなったので、イベントを再追加する必要があります。それらは同様に初期に添付されなければならないので(当たり前ですが)、DRYであるために素晴らしい関数にあります。

このセットアップには何も問題はないのですが(というかあるのか?私は addEventsAndStuff() 関数を作ってすぐに呼び出すと、素人っぽさが出ません。

以下はどちらもシンタックスエラーで応答します。

function addEventsAndStuff() {
  alert('oele');
}();

(function addEventsAndStuff() {
  alert('oele');
})();

誰かいませんか?

どのように解決するのですか?

質問で投稿された例では何も問題はありません。 他のやり方は変に見えるかもしれませんが。

var addEventsAndStuff;
(addEventsAndStuff = function(){
    // add events, and ... stuff
})();


JavaScriptで関数を定義するには、2つの方法があります。 関数の宣言です。

function foo(){ ... }

という関数式と 任意 のように、上記以外の関数を定義する方法があります。

var foo = function(){};
(function(){})();
var foo = {bar : function(){}};

...など

関数式は名前をつけることができますが、その名前は含むスコープに伝搬されません。 このコードが有効であることを意味する。

(function foo(){
   foo(); // recursion for some reason
}());

が、これは違う。

(function foo(){
    ...
}());
foo(); // foo does not exist

つまり、関数に名前を付けてすぐに呼び出すためには、ローカル変数を定義し、そこに関数を式として代入し、呼び出す必要があるのです。