ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript IIFE: すぐに呼び出される関数式の完全ガイド
JavaScript は、スコープと実行を効果的に処理するためのさまざまなツールを提供します。最も注目すべきツールの 1 つは、Immediately Invoked Function Expression (IIFE) です。
IIFE は、定義された直後に実行される関数であり、変数と機能にプライベート スコープを提供します。この手法は、クリーンでモジュール化された競合のないコードが必要なシナリオでよく使用されます。
IIFE は、定義されるとすぐに実行される JavaScript 関数です。それは次のようになります:
(function () { console.log("This is an IIFE!"); })();
または、ES6 のアロー関数を使用すると、次のようになります:
(() => { console.log("IIFE with an arrow function!"); })();
最初のかっこ () のセットは関数定義をラップし、宣言ではなく関数式になります。 2 番目の括弧 () のセットは、関数を直ちに呼び出します。
IIFE を記述する有効な方法はいくつかあります。
// Using the unary operator !(function () { console.log("IIFE using !"); })(); // Using void void (function () { console.log("IIFE using void"); })(); // Using + operator +(function () { console.log("IIFE using +"); })(); // IIFE with parameters and return value const result = (function (x, y) { return x + y; })(10, 20); console.log(result); // 30
IIFE にはいくつかの利点があります:
const utils = (function () { const calculateSum = (a, b) => a + b; const calculateProduct = (a, b) => a * b; // Only expose what we want to be public return { sum: calculateSum, // product remains private }; })(); console.log(utils.sum(3, 7)); // 10 console.log(utils.calculateProduct); // undefined
この例では、calculateSum 関数はプライベートであり、IIFE の外部からアクセスすることはできません。
let と const が利用可能になる前、開発者は IIFE を使用してブロック スコープを実現していました。
for (var i = 0; i < 3; i++) { (function (j) { setTimeout(() => console.log(j), 1000); // 0, 1, 2 })(i); }
const Config = (function () { let instance; function createInstance() { const settings = { theme: "dark", language: "en", }; return { getSettings: () => settings, updateSettings: (newSettings) => Object.assign(settings, newSettings), }; } return { getInstance: function () { if (!instance) { instance = createInstance(); } return instance; }, }; })(); const config1 = Config.getInstance(); const config2 = Config.getInstance(); console.log(config1 === config2); // true
const Calculator = (function () { // Private variables and methods let result = 0; function validate(num) { return typeof num === "number" && !isNaN(num); } // Public API return { add: function (num) { if (validate(num)) { result += num; } return this; }, subtract: function (num) { if (validate(num)) { result -= num; } return this; }, getResult: function () { return result; }, }; })();
IIFE は特定のシナリオでは依然として役立ちますが、最新の JavaScript では、それぞれに利点のある代替手段がいくつか提供されています。比較は次のとおりです:
IIFE は以下に引き続き関連します:
(function () { console.log("This is an IIFE!"); })();
(() => { console.log("IIFE with an arrow function!"); })();
// Using the unary operator !(function () { console.log("IIFE using !"); })(); // Using void void (function () { console.log("IIFE using void"); })(); // Using + operator +(function () { console.log("IIFE using +"); })(); // IIFE with parameters and return value const result = (function (x, y) { return x + y; })(10, 20); console.log(result); // 30
const utils = (function () { const calculateSum = (a, b) => a + b; const calculateProduct = (a, b) => a * b; // Only expose what we want to be public return { sum: calculateSum, // product remains private }; })(); console.log(utils.sum(3, 7)); // 10 console.log(utils.calculateProduct); // undefined
ES モジュールやブロック スコープなどの最新の JavaScript 機能により、一部のシナリオでは IIFE の必要性が減りましたが、IIFE は JavaScript 開発における重要なパターンであり続けています。 IIFE を理解することは、既存のコードベースを操作し、ブラウザ互換ライブラリを作成し、特定のデザイン パターンを効果的に実装するために重要です。
IIFE を使用するか最新の代替手段を使用するかの選択は、特定のユースケース、ブラウザーのサポート要件、プロジェクトの制約に基づいて行う必要があることに注意してください。
以上がJavaScript IIFE: すぐに呼び出される関数式の完全ガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。