三十、IIFE 即时调用函数表达式

三十、IIFE 即时调用函数表达式

IIFE是一个缩写:immediately-invoked function expression 即时调用函数表达式

IFEE 表示在函数定义的时候,就立即执行

1
2
3
4
5
6
7
8
<script>
// 声明函数
function fun(){
console.log(1);
}
// 调用
fun(); // 1
</script>

函数名+()调用

报错:

因为小括号只有书写在函数名或函数表达式后面,才表示调用。不能直接书写在function声明后面。

1
2
3
4
5
6
7
8
<script>
// 声明函数
function fun(){
console.log(1);
}();
// 调用
// fun();
</script>

UkePKI.png

()可以直接书写在函数表达式后面表示调用

1
2
3
4
5
6
<script>
// ()可以直接书写在函数表达式后面表示调用
var fun = function(){
console.log(1);
}(); // 1
</script>

可以将function关键字这种通过数学运算符转换为函数表达式,比如+-()

1
2
3
4
5
6
7
8
9
10
11
<script>
// 可以通过 + - 等,将function转为表达式
+ function fun1(){
console.log(10);
}();

// 小括号
(function fun2(){
console.log(100);
})();
</script>

UkeFqP.png

一般我们实际使用,将一个匿名函数书写在小括号中,然后立即调用。

1
2
3
4
// 实际使用 IIFE 是将匿名函数书写在小括号中转为函数表达式,再书写调用小括号
(function(){
console.log(1000); // 1000
})();

IIFE 作用域:只能在IIFE中使用,在外部不能再次访问该函数。

IIFE也可以关住变量、函数的作用域。

1
2
3
4
5
6
7
8
// IIFE 能够关住变量、函数的作用域
(function fun4(){
var a = 20;
console.log(a);
})();

// 变量作用域
console.log(a);

UkeEa8.png

1
2
3
4
5
6
7
8
// IIFE 能够关住变量、函数的作用域
(function fun4(){
var a = 20;
console.log(a);
})();

// 函数作用域
fun4();

Ukeuxs.png

IIFE实参书写在调用小括号中

1
2
3
4
// IIFE实参书写在调用小括号中
(function(a, b){
console.log(a + b); // 8
})(3, 5, 8 ,22);

IIFE函数内部书写return可以作为实际参数参与计算。

1
2
3
4
5
6
7
8
9
10
11
12
// IIFE 内部也可以使用return,作为实际参数参与其他计算
function sum(a, b, c){
// a,b 中的最大值和 c 相加
// IIFE 求 a , b 较大值
return c + (function(){
// 返回 a , b 中的最大值(三元表达式:如果 a>b为真,则取 a; 为假,则取 b)
return a > b ? a : b; // 内部可以调用外部的值
})();
}

// 调用
console.log(sum(1, 5 ,9)); // 14
点击查看

本文标题:三十、IIFE 即时调用函数表达式

文章作者:Mango

发布时间:2020年07月08日 - 22:04:29

最后更新:2020年07月08日 - 22:35:39

原始链接:https://mango185.github.io/post/e28249d7.html

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

-------------------本文结束 感谢您的阅读-------------------