JS IIFE
10258 ワード
IIFEとは?
Immediately Invoked Function Expressions.
関数の定義時にすぐに呼び出されるインスタント実行関数.
即時実行関数は1回のみ呼び出され、再呼び出されません.
どのように使いますか。
(function () {
console.log('IIFE')
})(); // IIFE
(function () {
console.log('IIFE2')
}()); // IIFE2
(function () {
console.log('IIFE')
})(); // IIFE
(function () {
console.log('IIFE2')
}()); // IIFE2
*ただし、このメソッドは矢印関数では使用できません.
どうして小包を使いますか。
function(){ }
キーワードを使用すると、jsコードを解釈する解析器は、関数宣言(statement)として認識するからである.上の図に示すように、()パッケージを使用して実行しないとエラーが発生します.文はjs解釈器を示し、それを消去するので、「値」として保持されません.
そのため、
関数宣言ではなく、関数式であることを明示的に示す必要があります.
なぜ使うのですか?長所は?
一度だけ実行される関数の場合は使用します。
iifetest
を再実行すると、エラーが表示されます.関数の戻り値を変数に直接割り当てるために使用します。
-次の図に示すように、一般関数を変数に割り当てて式にし、関数
addFunc
をコンソールに印刷すると、関数add
から返される値がコンソールに印刷されることがわかります.-関数
add
をコンソールで撮影すると、関数自体が表示されます.-
addFunc2
の値4がコンソールに印刷されていると判断できますが、add2
関数が定義されていないというエラーが発生しました.不要なグローバル変数と関数の作成を回避します。全局計を汚染しなくてもいいです。
エンクロージャと一緒に使用すると、プライベートデータを使用できます。
const counter = (() => {
let num = 0;
return {
increase: () => num++,
decrease: () => num--,
}
})();
console.log(counter.increase()); // 1
console.log(counter.increase()); // 2
console.log(counter.increase()); // 3
console.log(counter.decrease()); // 2
console.log(counter.num); // undefined !!! 접근할 수 없음 !
console.log(counter);
/* [object Object] {
increase: () => number++,
decrease: () => num--
} */
適用
IIFEを直接使用したことがない場合は,再帰アルゴリズムを解き,使用したコードを添付してみる.
指定した文字列を配列形式で返すときに作成できる図のアルゴリズムの問題.斬新です!
anagram
関数は、後で再帰的に実行される関数であるため、IIFEとして使用することができる.function allAnagrams(string) {
let obj = {};
(function anagram (ana, str) {
if (str === '') { obj[ana] = 1; }
for (let i = 0; i < str.length; i++) {
anagram(ana + str[i], str.slice(0, i) + str.slice(i + 1));
}
})('', string);
return Object.keys(obj);
};
Reference
この問題について(JS IIFE), 我々は、より多くの情報をここで見つけました https://velog.io/@zuzokim/JS-IIFEテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol