10.JavaScript学习笔记——立即执行函数

立即执行函数

1. 立即执行函数的定义和形式

定义:此类函数没有声明,在一次执行后立即释放。适合做初始化工作,适合在整个代码中只执行一次的函数(初始化功能函数)。

普通函数在未执行时会占用内存空间,为了减少不必要的空间占据,可以对只执行一次的函数使用立即执行函数的方式来编写。

对应红宝书中的立即调用的匿名函数(IIFE立即调用的函数表达式)

立即执行函数的形式:

(function() {

} ())

第一组小括号放形参,第二组小括号放实参。

立即执行函数与普通函数在功能上,只有作用后销不销毁(释不释放)的区别。因此立即执行函数可以有形参实参、返回值、执行期上下文,并且也需要经历预编译。

(function (a, b, c) {
    console.log(a + b - 3 * c);
} (1, 2, 3))
var num = (function (a, b, c){
    var d = a + b + c * 2 - 2;
    return d; 
} (1, 2, 3))

2. 立即执行函数的两种写法

(function () {} ())以及(function () {}) ()

W3C建议第一种。

注意:

  • 只有表达式才能被执行符号执行()即为执行符号;

  • 能被执行符号执行的函数表达式,这个函数的名字就会被忽略

例1:

function test() {
    var a = 1234;
}();

上述程序的执行符号()前并不是表达式,而是函数声明。所以这种情况会报错。

function test() {
    var a = 1234;
}

test();  //test是表达式
1234;    //1234也是表达式

例2:

var num = function () {
    console.log('a');
} ();

上述程序执行符号之前是函数表达式,因此是可以立即执行的。但被执行后,num不再是函数。

例3:

+ function test() {
    console.log("a");
}();

在函数声明前加正负号、逻辑运算符等会将此句转化为表达式,可以被执行符号执行。表达式执行后,表达式名test会失效。

同样( )也会将括号内的语句转化为表达式。因此(function a() {})就转化为了表达式,(function a() {})();就能被执行,这就是立即执行函数的由来。

同样对于(function a() {} ());而言,会先看最外层的小括号,此时会将其内部的内容转化为表达式,同样将函数声明变成了可执行的表达式。又由于能被执行的表达式会被忽略其名字,因此可将函数名省略,可简写为(function () {} ())

特殊的

function test(a, b, c, d) {
    console.log(a + b + c + d);
}(1, 2, 3, 4);

这样并不会报错,但是函数也不会执行。这样写就相当于

function test(a, b, c, d) {
    console.log(a + b + c + d);
}

(1, 2, 3, 4);

系统会将其看作两个语句,一个是函数声明,一个是(1, 2, 3, 4)语句。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值