26

有誰知道如何使用ES6箭頭語法編寫即時函數?使用JavaScript ES6箭頭函數的即時函數

這裏做的ES3/5路:

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

我試過以下,但在最後一行得到unexpected token錯誤。

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

你可以在這裏測試:http://www.es6fiddle.net/hsb8bgu4/

+3

調用之前關閉分組 - '})();'http://www.es6fiddle.net/hsb8ot2m/ –

+0

這可能是一個錯誤traceur(可能與[此問題(https://github.com/google/traceur-compiler/issues/457))。它適用於babel([repl demo](http://babeljs.io/repl/#?experimental=false&evaluate=true&loose=false&spec=false&playground=true&code=()%20%3D%3E%20%7B%0D% 0A%20%20%return 20%22Yay!%22%0D%0A%7D()%3B)) – Bergi

+0

請務必記住'function_name'+'()'==='function_caller' – xgqfrms

回答

35

Arrow functions examples

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

所以,函數調用操作外應。

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

樣品:http://www.es6fiddle.net/hsb8s1sj/

+2

這種方式也適用於常規功能,無論如何它只是更有意義 - 包裝函數本身使其成爲一個表達式,然後調用該表達式。事實上,當你包裝整個函數調用時,它也是有效的,這是一個奇怪的怪癖,我很高興這不適用於箭頭 – callum

4

這裏是我的演示代碼!

永遠記住,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/Immediately-invoked_function_expression ** IIFE * * – xgqfrms

+0

「立即調用的函數表達式」作爲一個術語描述了一種設計模式,它也被稱爲「自我執行的匿名函數」。 – xgqfrms

相關問題