Anonymous function expression
虽然匿名函式很好用,但有时在许多callback时会造成难以阅读
setTimeout(function(){ console.log("hello world")}, 3000);
function expression
具名函式有名称会比较好阅读,虽说匿名与具名没有差别,但对于readability很有帮助
setTimeout(function Hello(){ console.log("hello world")}, 3000);
Arrow Function
箭头函式提供更简洁的写法,但要注意Arrow function会指定this
a = 1const func = () =>{ console.log(this.a) //undefined}func()function hello(){ console.log(this.a) //1 RHS全域的a}hello()
IIFE(Imadiately invoked function expression)
function Scope不会被全域变数汙染.立即执行不用使用function Statement先来看没有使用IIFE的fucntion,下列function不是function statement所以无法执行,语法上就错了不能使用匿名函式
function(a){ console.log("Start") for(let i = 0; i < a ; i++){ console.log(i) } console.log("end-for")}
这边直接使用括弧包起来,要传参数即在最后(parameter)即可
(function(a){ console.log("Start") for(let i = 0; i < a ; i++){ console.log(i) } console.log("end-for")})(5) //Start 1,2,3,4,5 end-for
避免被汙染
var name = "Dennis";(function(){ var name = "Jessica"; console.log(name); //Jessica})()console.log(name); //Dennis