aboutsummaryrefslogtreecommitdiff
path: root/files/ja/glossary/iife/index.html
blob: 2a4cdd8363324a45b1f16b6abd3921687cba5c51 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
---
title: IIFE (即時実行関数式)
slug: Glossary/IIFE
tags:
  - CodingScripting
  - DesignPattern
  - Functions
  - Glossary
  - JavaScript
  - デザインパターン
  - 用語集
  - 関数
translation_of: Glossary/IIFE
---
<p><strong>IIFE</strong> (Immediately Invoked Function Expression; 即時実行関数式) は定義されるとすぐに実行される {{glossary("JavaScript")}}{{glossary("function", "関数")}} です。</p>

<pre class="brush: js">(function () {
    文
})();</pre>

<p>このデザインパターンは{{glossary("Self-Executing Anonymous Function", "自己実行無名関数")}}とも呼ばれ、次の2つの主な部分から成ります。</p>

<ol>
 <li>最初の部分は {{jsxref("Operators/Grouping", "グループ化演算子")}} <code>()</code> に囲まれた静的スコープ付きの無名関数です。これは IIFE イディオム内で、汚いグローバルスコープと同様に変数へアクセスすることを防ぎます。</li>
 <li>2つ目の部分は即時実行関数式の <code>()</code> で、これを通じて JavaScript エンジンは直接関数を解釈実行します。</li>
</ol>

<h2 id="Examples" name="Examples"></h2>

<p>この関数は即時実行される関数式になります。関数式内の変数は外部からアクセスできません。</p>

<pre class="brush: js">(function () {
    var aName = "Barry";
})();
// 変数 aName はスコープ外からアクセスできません
aName // "Uncaught ReferenceError: aName is not defined" が発生します
</pre>

<p>IIFE を変数に代入することはその結果だけが保存されます。</p>

<pre class="brush: js">var result = (function () {
    var name = "Barry";
    return name;
})();
// Immediately creates the output:
result; // "Barry"</pre>

<section id="Quick_links">
<ol>
 <li>学習記事
  <ol>
 <li><a href="/ja/docs/Web/JavaScript/A_re-introduction_to_JavaScript#Functions">簡単な例</a> (「関数」の節の最後、「カスタムオブジェクト」の直前)</li>
  </ol>
 </li>
 <li>Wikipedia の記事
  <ol>
   <li>{{interwiki("wikipedia", "en:Immediately-invoked function expression", "IIFE")}} (英語)</li>
  </ol>
 </li>
 <li><a href="/ja/docs/Glossary">用語集</a>
  <ol>
   <li>{{Glossary("Function", "関数")}}</li>
   <li>{{Glossary("Self-Executing Anonymous Function", "自己実行無名関数")}}</li>
  </ol>
 </li>
</ol>
</section>