在立即执行函数里面,()里面包裹着一个匿名函数,将匿名函数看作函数表达式,那么()该怎么理解?以前也见过类似的在()里面写表达式的,所以()该怎么理解?
直接看ECMA-262 5.1里的语法定义,表达式有下面几种:
最后一个就是题主想问的()
,来看文档:
原来正式的名称是Grouping Operator,作用就是对里面的表达式求值,然后返回求值的结果。
首先()是一种运算符,它有两种用法:
1.(expression)
:表示对expression进行求值,并且return求值的result。
2.functionName()
:表示调用函数functionName。
//匿名函数自执行
(function(){
console.log(1)
})();
//函数表达式
var someFun = function(){
console.log(1);
}
someFun();
上面的这两种写法其实是等价的;
在匿名函数的第一个括号里,其实是将这个函数匿名函数变为了函数声明,然后后面的一个括号表示函数执行。
希望对你有用!
8 回答4.5k 阅读✓ 已解决
6 回答3.1k 阅读✓ 已解决
5 回答2.7k 阅读✓ 已解决
5 回答6.2k 阅读✓ 已解决
4 回答2.2k 阅读✓ 已解决
3 回答2.4k 阅读
5 回答1.1k 阅读✓ 已解决
圆括号本身是一运算符:它里边有东西的话,它起提升优先级的作用;如果它里边没东西,就是函数调用。函数声明和函数表达式的语法其实非常的像(参见函数),区别只在于函数表达式中的函数名是可以忽略的(就是匿名函数)。所以如果看到没名的函数,那一定是函数表达式~那匿名函数为啥要用圆括号包起来?原因在于如果不包的话,没名又没赋给变量,咋引用?于是系统会认为你写了个不合(基本)法的表达式;括起来以后呢,相当于对函数返回值加了一道计算,所以就合法了,再加个括号调用执行,就变成了IIFE(立即调用函数表达式)了。