乐趣区

IIFE立即执行函数

区别 function
Iife 最左边为(。编译器认为是 iife,不是函数。

IIFE 的目的是为了隔离作用域,防止污染全局命名空间

弥补 scope 的缺陷 用于隔离作用域
全局作用域 块级作用域 函数作用域
只有 function 才能实现作用域隔离,因此如果要将一段代码中的变量、函数等的定义隔离出来,只能将这段代码封装到一个函数中。

将代码封装到函数中的目的是为了复用。在 JS 中,当然声明函数的目的在大多数情况下也是为了复用,但是 JS 迫于作用域控制手段的贫乏,我们也经常看到只使用一次的函数:这通常的目的是为了隔离作用域了!既然只使用一次,那么立即执行好了!

IIFE 构造单例模式

JS 的模块就是函数,最常见的模块定义如下:
functionmyModule(){
varsomeThing=”123″;
varotherThing=[1,2,3];

functiondoSomeThing(){

console.log(someThing);

}

functiondoOtherThing(){

console.log(otherThing);

}

return{

doSomeThing:doSomeThing,
doOtherThing:doOtherThing

}
}

varfoo=myModule();
foo.doSomeThing();
foo.doOtherThing();

varfoo1=myModule();
foo1.doSomeThing();
如果需要一个单例模式的模块,那么可以利用 IIFE:
var myModule=(functionmodule(){
varsomeThing=”123″;
varotherThing=[1,2,3];

functiondoSomeThing(){

console.log(someThing);

}

functiondoOtherThing(){

console.log(otherThing);

}

return{

doSomeThing:doSomeThing,
doOtherThing:doOtherThing

}
})();

myModule.doSomeThing();

myModule.doOtherThing()

退出移动版