JavaScript立即执行函数(自执行函数)的3种写法

一、什么是立即执行函数

顾名思义,声明一个函数并马上调用这个函数就叫做立即执行函数;也可以说立即执行函数是一种语法,让你的函数在定义以后立即执行;立即执行函数又叫做自执行函数。

二、立即执行函数的写法

立即执行函数的写法有3种:

( function ( “ 参数 ” ) { " 函数方法 " ; } ) ( “ 给参数传的值 ” )
( function ( " 参数 " ) { “ 函数方法 ” ; } ( " 给参数传的值 " ) )
! function ( " 参数 " ) { " 函数方法 " ; } ( " 给参数传的值 " )  
// ! 可以换作 void 或其他运算符(比如 +,-,= 等,都能起到立即执行的作用)

三、立即执行函数的封闭性

1、立即执行函数执行完毕后,与外界再无关联。

下面是一个普通函数aaa与一个立即执行函数bbb,输出这两个函数会发现,普通函数aaa被全部打印出来,而打印立即执行函数bbb却报错。因为立即执行函数bbb执行完毕后,即不存在bbb的定义了。

function aaa(a,b){
    return sum = a + b;
}
(function bbb(a,b){
    return sum = a + b;
}(1, 2))
console.log(aaa)
console.log(bbb)

2、立即执行函数内部可以访问外部,但外部无法访问内部。

下面是一个匿名的立即执行函数,它若是想访问外部的变量,将外部变量以参数形式传进去即可,但是外部是无法访问内部的。该匿名立即执行函数创建了一个新的函数作用域,相当于创建了一个“私有”的命名空间,该命名空间的变量和方法不会破坏污染全局的命名空间。如jQuery代码结构,其中window是全局对象。

(function (window) {
    // jquery code
})(window);

四、立即执行函数的注意点

前面介绍了3种立即执行函数的写法,使用前两种写法的立即执行函数,它们的前一个函数必须要有分号。举个例子:

(function (a){
  console.log(a)
})(1)
(function (a){
  console.log(a)
}(2))

虽然ECMAScript规范具有分号自动插入规则,但是在上面代码中,在第一个立即执行函数末尾却不会插入“;”,因此上面代码会被解释为如下形式:

(function (a){
  console.log(a)
})(1)(function (a){
  console.log(a)
}(2));

此时浏览器报错:

因此,立即执行函数前的一个函数必须要有分号,保险起见,可以直接在立即执行函数的前面添加“;”

;(function (a){
  console.log(a)
})(1);
;(function (a){
  console.log(a)
}(2));

 欢迎关注作者微信公众号【愤怒的it男】

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值