为什么需要使用函数:提高开发效率复用,减少代码量开发和维护更灵活函数分离写参数和返回值,让函数更灵活函数三要素:函数参数和返回值创建函数:表达式:letfn=function(){}声明式:functionfn(){}会导致函数被提升构造函数:letfn=newFunction(){}调用函数首字母大写:函数名();anonymousfunction:function(){}IIFE:immediateExecutingfunction:Example:(function(){console.log(666);}())//666只和写法有关,可以用IIFE和or没有名字。(Food){console.log(`Eat${food}`)//形参}Takeaway(“冒菜”)//实参如果有形参没有实参,会打印undefined,如果有一个实参但没有形参,则不会调用返回值:通过return.....return后不能写函数例子:letfn=function(){letnumber=5;返回号码;//将值传递出去}leta=fn();console.log(a)//5返回5;`returnnoreturn不执行return之后的语句return只能返回一个值,多个值使用[]数组(伪类数组对象统计实参个数)arguments[index]也可以接收实参。参数是函数的属性。返回所有实际参数可以类似于数组来获取值。示例:functionfn(a,b){console.log(fn.arguments[0]);//1获取下标0对应的实参1console.log(fn.arguments);//0:11:22:3获取所有实参console.log(fn.arguments.length);//2获取实参的下标长度console.log(arguments[2]);//3调用未使用的实参}fn("1","2","3")函数的执行:函数的写法顺序,无法确定函数的执行顺序ES6:默认参数,形参=默认值,有实参就用实参,没有实参就用默认值示例:letarr=tunction(name="1"){console.log(${name})//1}fn("2");fn();Remainingparameters...参数写在形参的末尾,Real数组(可变参数)存入数组例子:letfn=function(x,y...rest){console.log(x,y)//1,2console.log(rest)//[3.4]}fn(1,2,3,4);函数长度:函数f70(a,b,c=2){console.log(f70.length);//2}f70(1,2,3,4,5,6);functionf70(a,b,...c){console.log(f70.length);//2}f70(1,2,3,4,5,6);函数f70(a=0,b,c){console.log(f70.length);//0}f70(1,2,3,4,5,6);解构示例:letfn=function([a,b]){//a=1b=2console.log(a,b)//1,2}fn([1,2]);箭头函数的速记示例:1.letfn=function(x,y){......}fn();letfn=(x,y)=>{}letfn=x=>{}只有一个参数letfn=x=>a-b当只有一个返回arrowFunctionscannotbeappliedtoconstructorargumentscannotused不行,得把this绑定到函数上函数回调:将函数A作为参数传递给函数B,在函数B中调用。函数A是回调回调更多的用在异步编程很多,目前使用自己的sort、som、fliter、foEach等。例子:letfnA=function(){console.log(666);//666}letfnB=function(cb){cb();}fnB(fnA);递归(函数直接或间接调用自身)无限递归:例子:letfn=function(){fn();}fn();合并:示例:让arr=[1,2,3]让结果=arr.reduce((a,b)=>a*b);console.log(结果)//6
