2021-11-21 函数进阶

函数,即得到某种数据所需的方法,在JS(javascript后称JS)中,函数为封装的一段代码,用来求得期望数据的一种方式,比如常见的函数:

function sum(a, b) {         

  let sum = a + b;           

return sum        }       

let a1 = sum(2, 4);     

  console.log(a1);


上面就是一个简单的求和函数,在a1这个变量里传两个数,直接获得所需的结果,由于函数得到了封装,因此我们可以重复使用,也不用担心多次输入数值占据内存,在《2021-11-17》文中我们简单了解了一下函数的基础构成,下面我们将具体研究一下函数以及方法:

写法:

直接用关键词function构建

function(关键词)   +   fn(函数名,用于后面调用函数,不拘于fn,可以是你喜欢的字母排序)  +  {

let sum = a  +  b  (此处为表达式,是函数的本体和灵魂,处理a和b的关系表达式)

}

变量

let abcd(变量名) = function(函数名){

表达式

}

箭头函数

fn(函数名)(a,b)(函数的变量)=>{ 表达式  \n return 结果 },特殊情况。当函数内部返回式或表达式只有一行时(总之花括号里只有一行代码时)可以省略简写为:

fn(a,b)=>(let sum = a+b);

同样的,函数可以封装成日用小工具,将工具性质函数专门封装到一个JS文件里,需要用的时候再调用一下外部JS即可(调用外部JS的方法:<script src="    "> </script>,括号内填地址,两个标签中不要写任何代码)

例如:

位数补零:

let pushadd = date1 => date1 < 10 ? '0' + date1 : date1

 console.log(pushadd(3))   //结果是03


同样地,你可以存放所有你认为有用快捷的方法在自定义的工具函数中。

递归函数

递归函数是指函数的表达式或者返回值中再次调用了函数本身,在函数执行过程中反复执行自身的函数(有点类似于画中画的效果,就是反复套娃,小熊猫摸了摸摸了摸摸了摸摸了摸摸了摸小熊猫耳朵的小熊猫耳朵的小熊猫耳朵的小熊猫耳朵的小熊猫耳朵的小熊猫),因此,函数本身会趋近于无限执行自身,所以需要设置跳出的条件,否则就会死循环,

比如这里用递归函数求1-100的累加值:

function calc(num){

if(num===1){

return num

}

let sum = num + calc(num-1) return sum

}

console.log(calc(100));  


上述中100会被代入函数,100不等于1,所以sum=100+calc(99);calc(99)又会重新执行这个函数,所以最后会从100+99+98+97+...+1,从而得出1到100的累计值,值得注意的是当最后calc(2)时,2-1=1,所以以1来重复函数时会被判定1===1,从而跳出函数,就不会出现100+99+98+...+1+1的情况

高阶函数

所谓高阶函数就是函数的参数或者返回值是函数(区别于递归,这里的函数并不是函数本身),即:

function    fn(a,fn1())(这里的括号里面得函数就是区别于fn的另一函数){

}

例如:

function myFor(arr, callback) { 

  for (let i = 0; i < arr.length; i++) {   

    if (callback(arr[i])) {     

      console.log(arr[i]);     

  } 

  }

}

let arr = [111, 222, 333, 444, 555, 666, 777, 890];

 myFor(arr, num => num % 2 != 0);


其中函数myFor就是一个高阶函数,其变量callback为其回调函数,执行过程为将数组arr代入函数进行遍历,然后调用回调函数callback进行取值,将数组元素依次和callback函数返回值进行匹配,匹配为真就在控制台打印,最后在控制台查看所有匹配项,

高阶函数可以实现较复杂的运算或判断,因此实用度也更高。

闭包函数

所谓闭包函数就是在高阶函数的基础上,如果函数b座位函数a的参数或者返回值,并且调用了函数a的参数,则称函数a为闭包函数,由于闭包函数中函数b也要调用函数a的值,所以当首次函数a的参数被传入后,b函数将调用,则后期变更函数a的参数将不再会对函数产生影响,这种形式保证了函数a的数值安全,也更好的避免了一些不必要的bug的产生,是一种高效的数据编程方法:

function calc(n1, n2, type) {

let num1 = n1

let num2 = n2

switch (type) {

case '+':

return function () {

console.log(`${num1}+${num2}=${num1 + num2}`);

}

case '-':

return function () {

console.log(`${num1}-${num2}=${num1 - num2}`);

}

}


上面是一个简易的闭包函数计算器的使用,只能进行+和-的运算,但一旦输入数据后,后续更改的数据就不会影响运算结果了。

以上为博主一些笔记和分析,如需互动请关注博主私聊哦!

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容