js中(function(){})()的写法用处

以前看到老师写js的单例模式时疑惑为什么要这么写

    var singleton = (function () {
        var privateVariable;
        function privateFunction(x) {
            ...privateVariable...
        }
        return {
            firstMethod: function (a, b) {
                ...privateVariable...
            },
            secondMethod: function (c) {
                ...privateFunction()...
    } };
    }());

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13

后来查了下资料,js中(function(){…})()立即执行函数写法理解,终于了解了。

来来来,首先嘛,JS中函数有两种命名方式
1、一种是声明式。

而声明式会导致函数提升,function会被解释器优先编译。即我们用声明式写函数,可以在任何区域声明,不会影响我们调用。

function XXX(){}

    1

2、一种是函数表达式

函数表达式我们经常使用,而函数表达式中的function则不会出现函数提升。而是JS解释器逐行解释,到了这一句才会解释。因此如果调用在函数表达式之前,则会调用失败。

var k = function(){}

    1

    fn1();
    function fn1(){}//可以正常调用
     
    fn2();
    var fn2 = function(){}//无法调用

    1
    2
    3
    4
    5

OK,下面进入正题,对函数表达式加上(),是可以直接调用的 
但是如果是对声明式的后部加上()则是会被编译器忽略。

     var fn2 = function(){}();//对,就是这样
    function fn1(){}();//会被忽略

    1
    2

而平常的function(){}则是一种声明式,如果加上()括号后,则会被编译器认为是函数表达式,(加上+-号都可以),从而可以用()来直接调用

(function fn1(){})();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值