IIFE a JavaScript-ben: Mi az azonnali hívott funkciókifejezés?

Funkció nyilatkozat

A függvény deklarációval létrehozott függvény egy Function objektum, és rendelkezik a Function objektumok összes tulajdonságával, módszerével és viselkedésével. Példa:

 function statement(item){ console.log('Function statement example '+ item); }

Funkció kifejezés

A függvény kifejezés hasonló a függvény utasításhoz, azzal a különbséggel, hogy a név neve elhagyható anonim függvények létrehozásához. Példa:

 var expression = function (item){ console.log('Function expression example '+ item); }

Azonnal meghívott funkciók kifejezések

Amint létrejön a függvény, meghívja önmagát, nem kell kifejezetten meghívnia. Az alábbi példában az iife változó egy karakterláncot tárol, amelyet a függvény végrehajtása ad vissza.

 var iife = function (){ return 'Immediately Invoked Function Expressions(IIFEs) example '; }(); console.log(iife); // 'Immediately Invoked Function Expressions(IIFEs) example '

Az IIFE előtti nyilatkozatnak mindig a-val kell végződnie; vagy hibát fog dobni.

Rossz példa :

var x = 2 //no semicolon, will throw error (function(y){ return x; })(x); //Uncaught TypeError: 2 is not a function

Miért érdemes használni az azonnal meghívott funkciók kifejezéseket?

 (function(value){ var greet = 'Hello'; console.log(greet+ ' ' + value); })('IIFEs');

A fenti példában, amikor a javascript motor végrehajtja a fenti kódot, globális végrehajtási környezetet hoz létre, amikor meglátja a kódot, és létrehoz egy függvényobjektumot a memóriában az IIFE számára. És amikor 46a hívott függvény miatt elérhetővé válik az interneten, új végrehajtási kontextus jön létre menet közben, és így az üdvözlő változó a függvény végrehajtási kontextusába kerül, nem pedig a globális szintre, ez teszi egyedivé. This ensures that code inside IIFE does not interfere with other code or be interfered by another codeés így a kód biztonságos.

Több információ

  • Azonnal meghívott funkciókifejezés a Wikipédián
  • Mit csinál a JavaScript-könyvtárak vezető pontosvesszője?