匿名函数
1 | var add = function(x,y){ |
匿名函数,顾名思义就是没有名字的函数。函数表达式中的创建,实际上是创建一个匿名函数,并将匿名函数赋值给变量 add,用 add 来进行函数的调用,调用的方式就是在变量 add 后面加上一对括号(),如果有参数传入的话就是 add(1,2),这就是匿名函数的一种调用方式.
还有一种匿名函数的调用方式是:使用()将匿名函数括起来,然后后面再加一对小括号(包含参数列表)。
我们再看一下以下一个例子:
1 | alert((function(x,y){return x+y;})(2,3)) //弹窗提示5 |
在javascript中,是没有块级作用域这种说法的,以上代码的
这种方式就是模仿了块级作用域(通常成为私有作用域)
1 | (function(){ |
以上代码定义并立即调用了一个匿名函数–经函数声明包含在一对圆括号中,表示它实际上是一个函数表达式而紧随其后的另一对圆括号会立即调用这个函数
注意:
1 | function(){ |
上面的代码是错误的,因为Javascript将function关键字当作一个函数声明的开始,而函数声明后面不能加圆括号,如果你不显示告诉编译器,它会默认生成一个缺少名字的function,并且抛出一个语法错误,因为function声明需要一个名字。有趣的是,即便你为上面那个错误的代码加上一个名字,他也会提示语法错误,只不过和上面的原因不一样。提示为:Uncaught SyntaxError: Unexpected token (
。在一个表达式后面加上括号(),该表达式会立即执行,但是在一个语句后面加上括号(),是完全不一样的意思,只是分组操作符。
1 | function foo(){ |
1 | function foo(){ |
所以上面代码要是想要得到想要的弹窗提示,就必须要实现赋值,如:
1 | a = function(){ |
“a=” 这个片段告诉了编译器这个是一个函数表达式,而不是函数的声明。因为函数表达式后面可以跟圆括号
因此下面两段代码是等价的:
1 | var aa = function(x){ |
1 | //分组操作符 |