一、定义
IIFE(立即调用函数表达式) 是一个在定义时就会立即执行的JS函数。
(function (){
statements
})()
这是一个被称为自执行匿名函数的设计模式,主要包含两部分:
- 圆括号运算符里面是一个匿名函数,拥有独立的语法作用域;
特点:避免外界访问IIFE中的变量,不会污染全局作用域
- 再一次使用()创建一个立即执行的表达式,JS引擎到此将直接执行函数;
二、示例
示例1:
- 当函数变成立即执行函数表达式时,表达式中的变量不能从外部访问。
(function(){
var name = "leaf";
})()
name//抛出错误,name is not defined
- 将IIFE分配给一个变量,不是存储IIFE本身,而是存储IIFE执行后返回的结果。
var result = (function(){
var name = "leaf";
return leaf
})();
result;//"leaf"
立即调用的函数表达式(IIFE) 有一个 自己独立的 作用域,如果函数名称与内部变量名称冲突,就会永远执行函数本身,所以下面的结果输出是函数本身。
示例2
判断输出结果,并且解释原因?
var a = 1;
(function a () {
a = 2;
console.log(a);
})();
//输出结果
ƒ a () {
a = 2;
console.log(a);
}
如果将函数名字改一下,比如改为 x:
var a = 1;
(function x () {
a = 2;
console.log(a);
})();
//输出结果:2
函数表达式中的函数名称,只有自己独立的作用域可以拿到,不会影响全局:
var a = 1;
(function a () {
a = 2;
console.log(window.a);
})();
// 1
var a = 1;
(function x () {
a = 2;
console.log(a);
})();
// 2
立即调用的函数表达式里面的this根据浏览器环境决定,如果在浏览器中指向window:
(function(){
console.log(this)//这里的this指向window
})()
参考资料: