关于js中()圆括号的作用

  1. 首先,()操作符有两种用法,一是作为圆括号运算符,提升括号内表达式的优先级;二是作为函数调用操作符,用于执行在()操作符之前指向的函数名
  2. 其次,函数有函数声明和函数表达式两种声明形式,前者形如:

    function name([param,[, param,[..., param]]]) {
       [statements]
    }

    而函数表达式则是:

  3. let function_expression = function [name]([param1[, param2[, ..., paramN]]]) {
       statements
    };

    在函数表达式中,前边的 function_expression 如果存在,这就是个具名函数表达式;而反之则是匿名函数表达式。表达式里的 name 加的是方括号,表示可选:因为这个函数声明是被“禁锢”在 function_expression 变量里的,换句话说,它可以用function_expression()这种形式来调用(所以有没有名字其实无所谓了,因为函数名外部不可见)。

  4. 再说匿名函数表达式。
    匿名函数表达式,形如:

    function ([param,[, param,[..., param]]]) {
       [statements]
    }

    说白了就是函数声明不留名。做好事不留名可以,做函数不留名,...那怎么调动?所以这种形式单独存在的话,不合法。所以要怎么办?这时就出现了 IIFE,也就是立即调用函数表达式/自执行函数表达式。它的根本思想很简单,先用圆括号操作符把表达式本体罩住,表示“我罩你”,再在末尾加个函数调用操作符,表示“放胆做”,这俩加一块,就是“立即执行”:

    (function ([param,[, param,[..., param]]]) {
       [statements]
    })()

    (当然还有几种其它形式的,但先学标准的吧)

  5. 这些 balabala 的都看下来,你的问题也应该能有个解释了。(另外结下稿费,谢谢......
  6. 参考资料:

🌰:     

(function foo1(){})
foo1()    //Uncaught ReferenceError: foo1 is not defined
(function foo1(){console.log("haha")})()  //haha
(function foo1(){console.log("haha")}())  //haha

 包一下相当于一个匿名函数,拥有独立的作用域,对外不可见。参考资料里 IIFE 见详解。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值