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}`);

}

}


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

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

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,843评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,538评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,187评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,264评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,289评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,231评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,116评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,945评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,367评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,581评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,754评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,458评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,068评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,692评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,842评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,797评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,654评论 2 354

推荐阅读更多精彩内容