匿名函数是相对于有名字的函数
如function setAge(){}函数名为setAge
而类似于function(){}则就是一个匿名函数
有名字的函数执行时可以写成setAge(),而没有名字的函数则执行要写成(function())();
另一种方式是把匿名函数赋值给一个变量来使用
var a=function(){alert("hello,world");}a();
匿名函数传参
(function(age){return age;})(100);
匿名函数产生闭包
闭包简单来说就是一个函数里面还有函数(一般来说是匿名函数),看代码:
function box(){var a=10;return function(){alert("hello") }} box()//返回function(){ alert("hello") }一串代码 box()()//再加一个()才执行了匿名函数,返回hello
关于闭包解释,上面的说明太粗俗了,下面具体说明
有权访问另一个函数作用域内变量的函数都是闭包
闭包源于js作用域链问题,在js中局部变量可以直接访问全局变量,而全局变量无法访问局部变量
function box(){
var a=10;}
alert(a)//未定义,全局无法访问函数体内的var a=10变量,但有时我们需要外部能够取得这个局部的a变量,这时我们怎么做呢?闭包方式来了
利用js中局部变量可以直接访问全局变量,而全局变量无法访问局部变量这一原理,我们在box(){}内再构建一个函数,这事var a对于这个新构建的函数来说就是他的“全局变量”
例如
function getCircle(){var pi=3.1415926;//局部变量,怎样要外面的alert取得pi呢return function (){//写一个函数,这个函数可以取得pi的值 return pi;//这个pi值一旦调用getCircle()就可以return出匿名函数里的这个pi}}alert(getCircle()());
使用闭包的好处有什么?
在js中一旦function执行完毕,里面的变量都会被垃圾回收,被销毁,可以这样理解,js中局部变量优先于全局变量执行,函数体执行完毕后,就被销毁,所以全局变量就无法访问局部了。在一些情形中,我们需要将局部变量保存下来,我们就要用到闭包了。
总结:闭包好处:
一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。
function box(){var a=0;return function(){ a=a+1;return a;}}var b=box();b();//1b();//2
每次执行一次b() var a都不会清零,而是保留了上次的结果!