今天明白了立即执行函数不是唯一的

立即执行函数

立即执行函数是代码执行读到就立即执行,并且只执行一次,执行完毕后,立即销毁。所以,立即执行函数的一种初始化功能的函数。

立即执行函数有两种形式,第一种是W3C推荐的写法。

(function (){}())
(function (){})()

当代码执行到下面的语句时,会在控制台立即输出aaa、bbb,执行后会立即销毁。这就是立即执行函数。 

        (function () {
            console.log('aaa');
        }()); // 多个立即执行函数存在时,用分号隔开
        (function () {
            console.log('bbb');
        })()

假如给立即执行函数一个函数名。同样会输入结果,但是在控制台输入函数名时,系统会报错,这就是销毁了立即执行函数

        (function a() {
            console.log('aaa');
        }()); //  W3C推荐写法
        (function b() {
            console.log('bbb');
        })()

 

 

立即执行函数的本质

看 一个例子。

    var demo = function text() { // 这是一个函数表达式
            console.log('123');
            console.log(demo.name);
        }
    demo();

demo是对函数text的引用,只有当调用demo时,函数才会执行,所以结果会输出  123  ;函数执行完毕后,会释放内存空间,销毁函数。在控制台输入函数名text时,系统报错。这就说明,在函数表达式中,函数的名字并没有起到作用,给不给都一样。但需要注意的一点是,demo.name = text。 除了这一点作用,函数的名字没有任何意义。这样也就是我们习惯在写函数表达式时直接使用匿名函数了。同样的,立即函数,也是没有函数名。

    var demo = function () { // 这是一个函数表达式 使用匿名函数的形式
            console.log('123');
        }
    demo();

 

 

 

只有表达式才能被执行符号执行。看下面的代码会不会执行?

        var demo = function () { // 这是一个函数表达式
            console.log('123');
        }();

        function arr() {
            console.log('arr');
        }(); // 报错报错

要记住,只有表达式!表达式!表达式!才能被执行符号执行。第二个函数就函数声明不是表达式,所以不执行,系统报错。第一个函数是表达式,必须会执行啊。只要是表达式加上执行符号,它就会立即执行。

 

 

再来看,想想下面的代码会不会打印出来?

        + function zheng() {
            console.log('正号+执行');
        }();


        -function fu() {
            console.log('负号 - 执行');
        }();


        ! function tan() {
            console.log('叹号!执行');
        }();

答案是必须能打印出来的。这里要注意的是,+ - 是正负的意思不是加减,!是运算符。当加上 + 或 - 或!,后面的函数就变成表达式了,表达式紧接着加上" () ",就能被执行符号执行了,所以必须能执行。

 

 

所以,接下来我们就可以再来仔细看看立即执行函数的两种形式了。

第一种,最外层的 () ,它的本质就是一个数学运算中的小括号,这样里面的 function () {}() 就是表达式,可以被执行符号执行。此时表达式后面又带了执行符号 " () ",当然就能立即执行了。

(function (){}())   

第二种,也是最外层的左边的 " () ",是数学运算符,function () {} 成了表达式,在表达式后面添加执行符号" () ",当然必须能执行啊。

(function (){})()

 

立即执行函数在学习闭包时,会有惊喜哦!!!

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值