在javascript中,function是一个内置的类对象,也就是说,它是一类可以像String,Array,Number,和Object类管理。因为函数实际上是一种对象,它可以“存储在变量中,通过参数传递给(另一个)函数(function),在函数内部创建,并从函数返回一个结果值”。因为函数名本身就是变量,所以函数也可以用作值。也就是说,一个函数不仅可以像参数一样传递给另一个函数,还可以将一个函数作为另一个函数的结果返回。函数callSomeFunction(someFunction,somaArgument){returnsomeFunction(somaArgument);}functionadd(num){返回num+10;}varresult1=callSomeFunction(add,10);控制台日志(结果1);//20;functiongetGreeting(name){return"hello"+name;}varresult2=callSomeFunction(getGreeting,"world");控制台日志(结果2);//你好世界;这个calSomeFunction()函数是通用的,即不管第一个参数传入的是什么函数,它都是执行完第一个参数后返回结果。如果想在不执行函数的情况下访问函数指针,就必须去掉函数名后面的一对括号。所以在上面的例子中,传递给callSomeFunction()的是add和getGreeting,而不是执行它们之后的结果。接下来我们来看几个回调函数。jQuery中常用的函数:$("#btn").click(function(){alert("BtnClicked");})如上例,我们给click方法的形参传递了一个匿名函数。单击方法将调用(或执行)我们传递给它们的回调函数。这个例子就是一个典型的回调函数方式。再看一个典型的javascript例子:}}functiongetSome(obj,callback){回调(obj);}getInput({name:"CSDN",lang:"Javascript"},callFunction);返回的结果是CSDN:Javascript。callFunction作为参数传递给getSome,在函数内部,callback回调值用于在calFunction中处理这个值。这样就形成了一个很好的函数处理流程。将每个部分分开。对这个对象使用回调函数。当回调函数是包含这个对象的方法时,我们必须修改执行回调函数的方法来保护这个对象的内容。否则此对象将指向全局窗口对象,或指向包含函数。varobj={name:null,setName:function(firstName,lastName){this.name=firstName+"-"+lastName;}}functiongetName(firstName,lastName,callback){回调(firstName,lastName);}getName('Tom','Jony',obj.setName);控制台日志(对象名称);//nullconsole.log(window.name);//Tom-Jony执行obj.setName时,this.name不设置obj对象的名字,而是设置window对象中的名字,因为getName是一个全局函数。出现这种现象是因为this对象在全局函数中指向了window对象。这时候我们可以使用Call和Apply函数来保护这个对象。varobj={name:null,setName:function(firstName,lastName){this.name=firstName+"-"+lastName;}}functiongetName(firstName,lastName,callback,callbackObj){callback.call(callbackObj,firstName,lastName);//callback.apply(callbackObj,[firstName,lastName]);}getName('Tom','Jony',obj.setName,obj);控制台日志(对象名称);//Tom-这样,Jony就可以通过call函数正确设置this对象,现在我们可以正确执行回调函数,它正确地设置了obj对象中的name。使用apply也是如此。还提供多个回调函数。一个典型的例子是jQuery的ajax函数。functionsuccessCallback(){//在发送之前做一些事情}functionsuccessCallback(){//如果收到成功消息就做一些事情}functioncompleteCallback(){//在完成时做一些事情}functionerrorCallback(){//如果收到错误就做一些事情}$.ajax({url:"http://favicon.png",success:successCallback,complete:completeCallback,error:errorCallback});学前端的同学注意啦!!!如果大家在学习过程中遇到任何问题或者想获取学习资源,欢迎加入前端学习交流群461593224,一起来学习前端吧!
