JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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)
  • 「!」「-」「~」などの記号でも同様の効果が得られる
  • 実務では括弧を使った書き方が最も広く使われている

グローバルスコープの汚染を防ぎたい場合などに活用されるテクニックなので、コードリーディングの際に見かけたら、この仕組みを思い出してみてください。

  1. JavaScriptの式におけるカンマ演算子の役割とは?

    JavaScriptにおいて、カンマ(,)は演算子の一つです。カンマ演算子は、左から右へ各オペランドを順番に評価し、最後のオペランドの値を返すという特徴を持っています。基本的な動作カンマ演算子を使うと、複数の式を1つの式としてまとめることができます。すべての式が評価されますが、結果として返されるのは最後に評価された式の値のみです。サンプルコード<!DOCTYPE html> <html> <body> <script> var a = 100; a = (a++, a);

  2. JavaScriptの「?.(オプショナルチェーニング)」とは?意味と使い方をサンプルコードで解説

    JavaScriptのコードでときどき見かける奇妙な構文「?.」。これはオプショナルチェーニング(Optional Chaining)と呼ばれる機能で、ES2020から正式に導入されました。本記事では、具体例を使いながらその意味と使い方をわかりやすく解説します。 「?.」を例で理解しよう まずは、23歳の男性を表す次のようなオブジェクトを考えてみましょう。 const being = { human: { male: { age: 23 } } }; この being オブジェクトから age プロパティにアクセスしたい場