84669 person learning
152542 person learning
20005 person learning
5487 person learning
7821 person learning
359900 person learning
3350 person learning
180660 person learning
48569 person learning
18603 person learning
40936 person learning
1549 person learning
1183 person learning
32909 person learning
在立即执行函数里面,()里面包裹着一个匿名函数,将匿名函数看作函数表达式,那么()该怎么理解?以前也见过类似的在()里面写表达式的,所以()该怎么理解?
业精于勤,荒于嬉;行成于思,毁于随。
圆括号本身是一运算符:它里边有东西的话,它起提升优先级的作用;如果它里边没东西,就是函数调用。函数声明和函数表达式的语法其实非常的像(参见函数),区别只在于函数表达式中的函数名是可以忽略的(就是匿名函数)。所以如果看到没名的函数,那一定是函数表达式~那匿名函数为啥要用圆括号包起来?原因在于如果不包的话,没名又没赋给变量,咋引用?于是系统会认为你写了个不合(基本)法的表达式;括起来以后呢,相当于对函数返回值加了一道计算,所以就合法了,再加个括号调用执行,就变成了IIFE(立即调用函数表达式)了。
直接看ECMA-262 5.1里的语法定义,表达式有下面几种:
最后一个就是题主想问的(),来看文档:
()
原来正式的名称是Grouping Operator,作用就是对里面的表达式求值,然后返回求值的结果。
首先()是一种运算符,它有两种用法:1.(expression):表示对expression进行求值,并且return求值的result。2.functionName():表示调用函数functionName。
(expression)
functionName()
可参考此链接就是将函数声明变成一个语句。
//匿名函数自执行 (function(){ console.log(1) })(); //函数表达式 var someFun = function(){ console.log(1); } someFun();
上面的这两种写法其实是等价的;在匿名函数的第一个括号里,其实是将这个函数匿名函数变为了函数声明,然后后面的一个括号表示函数执行。希望对你有用!
圆括号本身是一运算符:它里边有东西的话,它起提升优先级的作用;如果它里边没东西,就是函数调用。函数声明和函数表达式的语法其实非常的像(参见函数),区别只在于函数表达式中的函数名是可以忽略的(就是匿名函数)。所以如果看到没名的函数,那一定是函数表达式~那匿名函数为啥要用圆括号包起来?原因在于如果不包的话,没名又没赋给变量,咋引用?于是系统会认为你写了个不合(基本)法的表达式;括起来以后呢,相当于对函数返回值加了一道计算,所以就合法了,再加个括号调用执行,就变成了IIFE(立即调用函数表达式)了。
直接看ECMA-262 5.1里的语法定义,表达式有下面几种:
最后一个就是题主想问的
()
,来看文档:原来正式的名称是Grouping Operator,作用就是对里面的表达式求值,然后返回求值的结果。
首先()是一种运算符,它有两种用法:
1.
(expression)
:表示对expression进行求值,并且return求值的result。2.
functionName()
:表示调用函数functionName。可参考此链接
就是将函数声明变成一个语句。
上面的这两种写法其实是等价的;
在匿名函数的第一个括号里,其实是将这个函数匿名函数变为了函数声明,然后后面的一个括号表示函数执行。
希望对你有用!