javascript中的匿名函数,那什么叫做匿名函数?
匿名函数就是没有函数名称;演示代码:
1 <script> 2 function(x,y){ 3 return x+y //这个就是一个匿名函数,没有函数名,但是这个函数不能调用。如何调用呢? 4 } //要声名一个变量,然后把这个匿名函数的执行的代码,和返回值赋值给声名的变量 5 </script>
javascript中的函数也是一种数据类型,只不过这种特殊类型有两个重要的特性:
1.他们所包含的是代码。
2.他们是可以执行的。演示代码:
1 <script> 2 var text = function(x,y){ 3 return x+y; //把这匿名函数赋值给变量text,说明这个匿名函数其实也是一个数据类型 4 } 5 alert(typeof text) //查看这个数据类型,=>function 数据类型是一个函数数据类型 6 alert(text(1,2)) //然后我们再通过调用这个赋值给这个变量。=>3 7 var text1 = text; //然后这个被赋值的这个函数数据的变量还可以再赋值给其它变量 8 alert(text1(4,5)) //然后再次调用赋值后的变量 =>9 9 10 </script>
可以将匿名函数作为参数传给其它函数,接收方函数就可以通过所传递进来的函数完成某些功能
先了解非匿名函数的回调方法 演示代码:
1 <script> 2 function calc(x,y){ 3 return x()+y(); //把text1函数的返回值作为calc函数参数x的值来传参调用 4 } //把text2函数的返回值作为calc函数参数y的值来传参调用 5 function text1(){ 6 return 1 7 } 8 function text2(){ 9 return 2 10 } 11 alert(calc(text1,text2)) //=>3 12 13 </script>
再来看看匿名函数的回调方法 演示代码:
1 <script> 2 function calc(x,y){ 3 return x()+y(); //把text1函数的返回值作为calc函数参数x的值来传参调用 4 } //把text2函数的返回值作为calc函数参数y的值来传参调用 5 alert(calc(function(){return 1},function(){return 2})) 6 //本质上用两个匿名函数的返回值做了x,y的传参 7 </script>
回调函数的实列 演示代码:
1 <script> 2 function addOne(a){ 3 return a+1 4 } 5 function calc(a,b,c,callback){ 6 var arr=[]; //先声名一个空数组 7 for(var i = 0 ;i<3;i++){ //循环遍历 8 arr[i] = callback(arguments[i]*2) //用arguments对象把三个参数的值乘以2,返回给addOne函数来调用产生的返回值再赋值给声名的空数组 9 } 10 return arr; 11 } 12 alert(calc(1,2,3,addOne)) //然后进行调用 =>3,5,7 13 alert(calc(2,3,4,function(a){return a+1}))//这个用的是用一个匿名函数来回调 //返回的是5,7,9 14 </script>
可以用call来进行回调函数 语法为:函数名.call(函数名,参数1,参数2)
可以用apply进行回调函数 语法为. 先声名一个数组 var a =[参数1,参数2 ] 函数名.apply(函数名,a)
自调的匿名函数,我们也可以称为立即调用的匿名函数。
优点: 使用自调的匿名函数不会产生任何全局变量。
缺点: 函数无法重复执行,适合执行一些一次性初始化的工作 演示代码:
1 <script> 2 (function(x,y){ 3 alert(x+y) 4 })(1,2) 5 </script>