Javascript 进阶 5-2 立即函式(IIFE)

这个章节要来讨论立即函式(IIFE)

根据上个章节我们讲到,函式陈述式必须要具名,才能够被调用。

函式表达式,无论具不具名,也必须要有变数乘装才能够透过 变数名称 + () 进行调用、呼叫。

function FnA () {    console.log('something');}FnA();

那么立即函式呢?

立即函式无论具不具名都没差,他在被浏览器阅读的当下,就会立刻执行 {} 内的程式码片段。

而写法则有两种

(function () {    console.log('第一种,小括号在函式结尾的后面');}());(function() {    console.log('第二种,小括号在外面');})();

只要位于立即函式的 {} 中间的程式码片段都会立即执行。

并且要记得,立即函式的最后一定要加 ;,不然 ASI 会误以为是一行而报错,中断 javascript 的直译过程。

立即函式(IIFE)的重点

立刻执行无法在函式外再次被执行
(function IIFE (){    console.log('立即函式(IIFE)');})()console.log(IIFE);

http://img2.58codes.com/2024/20121770ZExtLXpPI3.png

因为 console.log(IIFE); 在立即函式外执行所以报错。

这也是立即函式的一个特点喔~!!!

透过立即函式来限制变数的作用域

(function () {    var Ming = '小明';    console.log(Ming); // 小明})();console.log(Ming); // not define

所以可以看到,在立即函式内宣告的变数,也就是区域变数是无法在外部做呼叫的,这个观念也符合函式的观念。

但是有时候我们也想要像一般函式一样,传参数进入到立即函式的环境中,该怎么传呢?

传参数到立即函式中

var arg = '我是参数';(function (parameter) {    var Ming = '小明';    console.log(Ming + parameter); // 小明我是参数})(arg);

利用最后面的小括号带入想要传入的参数类型,并且在 立即函式的 function () 小括号设定接受的变数名称,就可以接收到传进立即函式的变数瞜。

立即函式回传值

同样的,立即函式也可以 return 一个回传值喔!

var whereMing = (function (where) {    console.log('where', where);    return where;})('小明在西门');console.log(whereMing); // 小明在西门

立即函式之间的共同变数沟通

主要有两种方法

方法1: 全域变数

var a = {};(function (b) {    b.person = '小明';})(a);(function (c) {    console.log(c.person); // 小明})(a);

方法1: 全域属性

(function (global) {    global.person = '小明';})(window);(function () {    console.log(person); // 小明})();

当我们将 window 传进去的时候,就代表我们对window 新增的属性 person 可以在别的 IIFE 中被调用,因此第二个 IIFE 不需要传入任何参数就可以取用到 window 的 person 属性。

这两种方式都是透过全域的变数、或是属性来完成资料的传递。

这种方法也多半都用于大型的框架、像是 Vue、React 等。

以上就是关于立即函式的介绍,如果没有问题就可以继续往下一篇文章前进噜。

希望对大家有帮助~汪汪!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章