JavaScript自调用函数的外层()的问题

在自调用函数中,我们经常看到诸如 (function () {})()  或者 (function(){}())  的写法,那外层的这个圆括号()是否可以去掉呢?答案是不可以的。

1. 命名函数的定义和调用:

// 函数声明
function test() {
    console.log('function');
}
// 函数调用
test();

2. 匿名函数的自调用:

// 写法一
(function () {
    console.log('function')
})();

// 写法二
(function () {
    console.log('function');
}());

// 写法三
void function() {  
    console.log('function');  
}()  

自调用函数外层的这个()是不可以省略的,这是由于JavaScript的表达式的解析问题:

(1)如果省略了外层的括号,则JavaScript无法解析为一个函数表达式的自调用;而是解析为一个函数的声明和一个圆括号,并显示语法错误——圆括号内没有有效的表达式。

(2)在执行的时候报错:Unexpected token (;

3. JavaScript运算符优先级

PS: 摘自MDN - 运算符优先级

优先级

运算类型

关联性

运算符

20

圆括号

n/a

( … )

19

成员访问

从左到右

… . …

需计算的成员访问

从左到右

… [ … ]

new (带参数列表)

n/a

new … ( … )

函数调用

从左到右

… ( … )

18

new (无参数列表)

从右到左

new …

17

后置递增(运算符在后)

n/a
 

… ++

后置递减(运算符在后)

… --

16

逻辑非

从右到左

! …

按位非

~ …

一元加法

+ …

一元减法

- …

前置递增

++ …

前置递减

-- …

typeof

typeof …

void

void …

delete

delete …

await

await …

15

从右到左

… ** …

14

乘法

从左到右
 

… * …

除法

… / …

取模

… % …

13

加法

从左到右
 

… + …

减法

… - …

12

按位左移

从左到右

… << …

按位右移

… >> …

无符号右移

… >>> …

11

小于

从左到右

… < …

小于等于

… <= …

大于

… > …

大于等于

… >= …

in

… in …

instanceof

… instanceof …

10

等号

从左到右
 

… == …

非等号

… != …

全等号

… === …

非全等号

… !== …

9

按位与

从左到右

… & …

8

按位异或

从左到右

… ^ …

7

按位或

从左到右

… | …

6

逻辑与

从左到右

… && …

5

逻辑或

从左到右

… || …

4

条件运算符

从右到左

… ? … : …

3

赋值

从右到左

… = …

… += …

… -= …

… *= …

… /= …

… %= …

… <<= …

… >>= …

… >>>= …

… &= …

… ^= …

… |= …

2

yield

从右到左

yield …

yield*

yield* …

1

展开运算符

n/a

...

0

逗号

从左到右

, …

猜你喜欢

转载自blog.csdn.net/xiaomajia029/article/details/84299721