JavaScript中的特殊函数怎么使用
导读:本文共2972.5字符,通常情况下阅读需要10分钟。同时您也可以点击右侧朗读,来听本文内容。按键盘←(左) →(右) 方向键可以翻页。
摘要: 匿名函数JavaScript 可以将函数作为数据使用。作为函数本体,它与普通的数据一样,不一定有名字。没有名字的函数被称之为匿名函数。示例代码如下://匿名函数function(){//匿名函数,会报错return'一碗周';}但是在 JavaScript 并不支持匿名函数的语法,不过匿名函数有两个应用,如下所示:回调函数:将一个函数作为另... ...
目录
(为您整理了一些要点),点击可以直达。匿名函数
JavaScript 可以将函数作为数据使用。作为函数本体,它与普通的数据一样,不一定有名字。没有名字的函数被称之为匿名函数。
示例代码如下:
//匿名函数function(){//匿名函数,会报错return'一碗周';}
但是在 JavaScript 并不支持匿名函数的语法,不过匿名函数有两个应用,如下所示:
回调函数:将一个函数作为另一个函数的参数使用,作为参数的函数
自调函数:函数调用自身(定义即调用的函数)
回调函数
然函数与任何可以被赋值给变量的数据是相同的,那么它当然可以像其他数据那样被定义、删除、拷贝,以及当成参数传递给其他函数。
当一个函数作为参数传递给另一个函数时,作为参数的函数被称之为回调函数。作为使用回调函数的函数称为目标函数(外层函数)
示例代码如下所示
//定义一个函数,这个函数有两个函数类型的参数,然后分别执行那两个函数,并返回它们的和。functionsum(a,b){//->目标函数returna()+b()}functionone(){//->回调函数return1;}functiontwo(){//->回调函数return2;}console.log(sum(one,two));//3
执行流程如下:
当执行 sum
函数时,传入两个实参,在 sum
函数中,会将两个实参作为函数执行,并将返回值计算并返回。
匿名回调函数
所谓匿名回调函数,就是目标函数中的参数是没有名称的函数,将上一段代码修改为使用匿名回调函数
//定义一个函数,这个函数有两个函数类型的参数,然后分别执行那两个函数,并返回它们的和。functionsum(a,b){//->目标函数returna()+b()}console.log(sum(function(){//->匿名回调函数return1},function(){//->匿名回调函数return2}));//3
带参数的回调函数
functionmultiplyByTwo(a,b,c,callbakc){vari,ar=[]for(i=0;i<3;i++){//通过arguments对象将传入的参数*2,然后传入回调函数进行操作ar[i]=callbakc(arguments[i]*2);}returnar;}console.log(multiplyByTwo(1,2,3,function(a){//匿名回调函数returna+2}));
回调函数的优点:
匿名回调函数节省了全局命名空间
将私有的数据内容开放给指定位置使用
保证封装性 - 虽然可以使用私有数据,但是并不知道来源
有助于提升性能
但是回调函数也是有缺点的,当目标函数的参数是一个回调函数时,回调函数的参数又是另一个回调函数,另一个回调函数的参数还是一个回调函数…也就是套娃,也就形成了回调陷阱或称回调地狱。
自调函数
目前我们已经讨论了匿名函数在回调方面的应用。接下来我们讨论另外一种情况,即自调函数,这种函数可以在定义后立即调用。示例代码如下所示
(function(){console.log("自调函数");})()
这种语法看上去有点唬人,其实没有什么,我们只需将匿名函数的定义放进一对括号中,然后外面再紧跟一对括号即可。
语法结构如下图所示
值得注意的是,自调函数可以命名,但是还是会自调用,如果用函数名调用的话会抛出异常。
自调函数除了以上两种方式外,还有以下几种不常用的方式
+function(v){//形参varw=100;//局部变量console.log("自调函数"+v);}(1);//实参!function(v){varw=100;//局部变量console.log("自调函数"+v);}(2);~function(v){varw=100;//局部变量console.log("自调函数"+v);}(3);
使用即时自调匿名函数的好处是不会产生任何全局变量。
缺点在于这样的函数是无法重复执行的(除非将它放在某个循环或其他函数中)。这也使得即时函数非常适合于执行一些一次性的或初始化的任务。
作为值的函数
将一个函数作为另一个函数的结果并返回,作为结果返回的函数称之为作为值的函数。
示例代码如下:
functionouter(){varv=100;//在函数的函数体中定义另一个函数->内部(私有)函数returnfunction(){//使用匿名函数returnv*2}}varresult=outer();console.log(result);//[Function]//或者下面这种方式与上面那种方式相同functionouter1(){varv=100;//在函数的函数体中定义另一个函数->内部(私有)函数functioninner(){returnv*2}returninner}varresult1=outer1();console.log(result1);//[Function:inner]
这样做的好处是:
有助于我们确保全局名字空间的纯净性(这意味着命名冲突的机会很小)。
确保私有性 — 这使我们可以选择只将一些必要的函数暴露给“外部世界”,而保留属于自己的函数,使它们不为该应用程序的其他部分所用。
</div> <div class="zixun-tj-product adv-bottom"></div> </div> </div> <div class="prve-next-news">
JavaScript中的特殊函数怎么使用的详细内容,希望对您有所帮助,信息来源于网络。