26

Kann jemand eine sofortige Funktion mit ES6-Pfeilsyntax schreiben?Sofortige Funktion mit JavaScript ES6-Pfeilfunktionen

Hier ist die ES3/5 Art und Weise tun:

(function() { 
    //... 
}()); 

Ich habe versucht, den folgend aber ein unexpected token Fehler in der letzten Zeile erhalten.

(() => { 
    //... 
}()); 

Sie können dies hier testen: http://www.es6fiddle.net/hsb8bgu4/

+3

die Gruppierung schließen vor dem Aufruf - '})();' http://www.es6fiddle.net/hsb8ot2m/ –

+0

Dies könnte ein Traceur Fehler sein (wahrscheinlich auf [diese im Zusammenhang Problem] (https://github.com/google/traceur-compiler/issues/457)). Es funktioniert gut mit babel ([repldemo] (http://babeljs.io/repl/#?experimental=false&evaluate=true&loose=false&spec=false&playground=true&code=()% 20% 3D% 3E% 20% 7B% 0D% 0A% 20% 20return% 20% 22Yay!% 22% 0D% 0A% 7D()% 3B)) – Bergi

+0

Denken Sie immer daran, dass 'function_name' + '()' === 'function_caller' – xgqfrms

Antwort

35

Vom Arrow functions examples,

(() => "foobar")() // returns "foobar" 

der Funktionsaufruf Bediener sollte also draußen.

(() => { 
    //... 
})(); 

Probe: http://www.es6fiddle.net/hsb8s1sj/

+2

Dieser Weg funktioniert auch mit regulären Funktionen , und es macht sowieso nur mehr Sinn - die Funktion selbst zu einem Ausdruck zu machen und dann diesen Ausdruck aufzurufen. Die Tatsache, dass es auch funktioniert, wenn du den gesamten Funktionsaufruf umlegst, ist eine seltsame Eigenart, ich bin froh, dass das nicht mit Pfeilen funktioniert. – callum

4

Hier ist meine Demo-Codes!

Denken Sie immer daran, dass function_name + () === function_caller

/* ES5 */ 
 

 
// normal function 
 

 
function abc(){ 
 
    console.log(`Hello, ES5's function!`); 
 
} 
 
abc(); 
 

 
var abc = function xyz(){ 
 
    console.log(`Hello, ES5's function!`); 
 
}; 
 
abc(); 
 

 
// named function 
 

 
var abc = function xyz(){ 
 
    console.log(`Hello, ES5's function!`); 
 
}(); 
 

 

 
// anonymous function 
 
// 1 
 
(function(){ 
 
    console.log(`Hello, ES5's IIFE!`); 
 
})(); 
 

 
// 2 
 
(function(){ 
 
    console.log(`Hello, ES5's IIFE!`); 
 
}()); 
 

 
// 3 
 

 
var abc = function(){ 
 
    console.log(`Hello, ES5's function!`); 
 
}(); 
 

 

 
/* ES6 */ 
 

 
// named arrow function 
 
const xyz =() => { 
 
    console.log(`Hello, ES6's Arrow Function!`); 
 
}; 
 
xyz(); 
 

 

 
const xyz = (() => { 
 
    console.log(`Hello, ES6's Arrow Function!`); 
 
})(); 
 

 

 
// Uncaught SyntaxError: Unexpected token (
 

 
/* 
 
const xyz = (() => { 
 
    console.log(`Hello, ES6's Arrow Function!`); 
 
}()); 
 
*/ 
 

 
// anonymous arrow function 
 
(() => { 
 
    console.log(`Hello, ES6's Arrow Function!`); 
 
})();

Using ES6 Arrow Functions realize IIEF!

Immediately-invoked function expression

let x; 
 

 
(x =() => { 
 
    console.log(`ES6 ${typeof(x)}`); 
 
})(); 
 

 
// ES6 function 
 

 
// OR 
 

 
(() => { 
 
    console.log(`ES6 ${typeof(Symbol)}`); 
 
})(); 
 

 
// ES6 function

+0

https://en.wikipedia.org/wiki/Integrierte_Funktionsausdruck ** IIFE * * – xgqfrms

+0

"Sofort aufgerufener Funktionsausdruck" als Ausdruck beschreibt ein Entwurfsmuster, das auch als "selbstausführende anonyme Funktion" bezeichnet wurde. – xgqfrms