JavaScriptの「+function(){}」記法とは?即時実行関数(IIFE)の仕組みをわかりやすく解説
JavaScriptのコードを見ていると、関数の先頭に「+」(プラス記号)が付いていることがあります。例えば次のような書き方です。
+function() { alert("Demo!"); }();一見すると不思議なこの記法には、明確な目的があります。この記事では、「+function(){}」の意味と動作原理、そして類似の代替記法について詳しく解説します。
「+function(){}」の役割:式として評価させる
「+function(){}」という記法は、主にパーサー(構文解析器)に「+」の後に続くものを式(expression)として扱わせるために使われます。
通常、行の先頭にfunctionキーワードがあると、JavaScriptはそれを「関数宣言」として解釈します。しかし関数宣言は文(statement)であり、その場で即座に呼び出すことはできません。
そこで先頭に「+」を付けることで、関数は関数式(Function Expression)として評価され、直後に()を付けることで即座に実行できるようになります。これがいわゆる即時実行関数(IIFE:Immediately Invoked Function Expression)です。
+function() { alert("Demo!"); }();このコードでは、関数が定義された瞬間にアラートが表示されます。
「+」以外にも使える記号
関数の前に入れる記号は「+」だけではありません。「+」は使える記号の一つにすぎず、以下のような単項演算子でも同じ効果が得られます。
- !(論理NOT)
- -(マイナス)
- ~(ビット反転)
いずれも関数を式として評価させる役割を果たすため、結果的にIIFEとして機能します。
括弧を使った一般的な書き方
実際の開発現場では、記号ではなく括弧を使ってIIFEを書くのが最も一般的です。括弧で囲むことでも、関数は式として評価されます。
外側を括弧で囲む書き方
(function() { alert("Demo!"); })();呼び出し部分ごと括弧で囲む書き方
(function() { alert("Demo!"); }());どちらの書き方も動作は同じですが、後者の}())スタイルは「呼び出しであること」が一目でわかるため、Douglas Crockford氏などの著名な開発者に推奨されてきました。
まとめ
- 「+function(){}」は、パーサーに関数を式として扱わせるための記法である
- これにより関数を定義と同時に即座に実行できる(IIFE)
- 「!」「-」「~」などの記号でも同様の効果が得られる
- 実務では括弧を使った書き方が最も広く使われている
グローバルスコープの汚染を防ぎたい場合などに活用されるテクニックなので、コードリーディングの際に見かけたら、この仕組みを思い出してみてください。
-
JavaScriptの式におけるカンマ演算子の役割とは?
JavaScriptにおいて、カンマ(,)は演算子の一つです。カンマ演算子は、左から右へ各オペランドを順番に評価し、最後のオペランドの値を返すという特徴を持っています。基本的な動作カンマ演算子を使うと、複数の式を1つの式としてまとめることができます。すべての式が評価されますが、結果として返されるのは最後に評価された式の値のみです。サンプルコード<!DOCTYPE html> <html> <body> <script> var a = 100; a = (a++, a);
-
JavaScriptの「?.(オプショナルチェーニング)」とは?意味と使い方をサンプルコードで解説
JavaScriptのコードでときどき見かける奇妙な構文「?.」。これはオプショナルチェーニング(Optional Chaining)と呼ばれる機能で、ES2020から正式に導入されました。本記事では、具体例を使いながらその意味と使い方をわかりやすく解説します。 「?.」を例で理解しよう まずは、23歳の男性を表す次のようなオブジェクトを考えてみましょう。 const being = { human: { male: { age: 23 } } }; この being オブジェクトから age プロパティにアクセスしたい場