js——高阶函数、闭包、递归以及浅拷贝和深拷贝
创始人
2024-02-21 06:24:37

目录

一、高阶函数

1、什么是高阶函数

2、把一个函数作为参数

3、return 返回的也是一个函数

二、闭包

1、闭包是什么

2、变量的作用域

3、案例

4、结果展示:

 5、总结:

三、递归

1、什么是递归

2、案例一

3、分析

4、问题

5、栈溢出又是什么呢

6、解决方法

7、案例二

8、分析

9、结果展示:

10、总结


一、高阶函数

1、什么是高阶函数

高阶函数是那些操作其他函数的函数。用最简单的话来说,高阶函数就是一个将函数作为参数或者返回值的函数。就是满足以下两种函数都可以称为高阶函数

(1)把一个函数作为参数

(2)return 返回的也是一个函数

2、把一个函数作为参数

举例说明:


上面的例子意思就是,我定义了一个函数fn,里面有三个参数,a,b以及一个函数callback,然后输出a+b,然后我再执行callback函数,他会先执行a+b,然后再执行callback函数

结果截图:

3、return 返回的也是一个函数

举例说明:

 

这里return 返回的是一个函数,那他就是高阶函数

总结:高阶函数是对其他函数进行操作的函数,他接受函数作为参数或将函数作为返回值输出

二、闭包

1、闭包是什么

闭包指有权访问另一个函数作用域中变量的函数

简单理解就是,一个作用域可以访问到另外一个函数内部的局部变量

2、变量的作用域

我们先复习一下关于变量的作用域的知识,来帮我们更好的理解闭包

 变量的作用域

        变量的作用域的不同分为两种:全局变量局部变量

        1、函数内部可以使用全局变量

        2、函数外部不可以使用局部变量

        3、当函数执行完毕,本作用域内的局部变量会销毁

3、案例

script>function fn(){num =8function fun(){console.log(num);}fun()}fn()

分析:首先我们定义了一个函数名叫fn的函数,我们在里面定义了一个num = 8 ,然后我们又在fn的函数中又定义了一个名叫fun的函数,然后我们在fun这个函数里面打印了num的值

4、结果展示:

 5、总结:

我们成功在fun函数中调用了fn函数中的变量num,也就是我们闭包说的在访问另一个函数作用域中变量的函数,这就是闭包。

三、递归

1、什么是递归

 如果一个函数在内部可以调用其本身,那么这个函数就是递归函数

简单理解:函数内部自己调用自己,这个函数就是递归函数

2、案例一

function fn(){fn()}fn()

3、分析

我们使用函数声明:用 function 关键字声明一个函数,再执行一个函数名fn,这种声明函数的方式我们是需要在函数外面调用函数的,但我不仅仅在函数外面调用,我在函数里面也调用了函数,是调用自己的函数。这就是一个最简单的案例

4、问题

像我们上面这样使用递归很容易发生“栈溢出”错误(stack overflow),结果如下图,原因是因为什么呢,举个例子,我们的递归其实跟我们的for循环很像,他会一直调用自己,但是如果这个函数里面还存在了一些变量或者数据的话,那他就会去内存开辟空间来保存这些数据,那么问题就来了,他一直在调用,就会一直开辟空间,那么就会导致“噶了”

5、栈溢出又是什么呢

每次执行JavaScript代码时,都会分配一定尺寸的栈空间(Windows系统中为1M),每次方法调用时都会在栈里储存一定信息(如参数、局部变量、返回值等等),这些信息再少也会占用一定空间,如果存在较多的此类空间,就会超过线程的栈空间了。
说白了就是就是不顾堆栈中分配的局部数据块大小,向该数据块写入了过多的数据,导致数据越界,结果覆盖了别的数据。

6、解决方法

就是当我们的代码的结果达到了我们所需要的效果就给他结束掉,也就是加一个return 

7、案例二

8、分析

我们首先定义了一个num=1,我们又定义了一个函数交fn,最外层绝对是要调用fn函数的,不然就没法运行了,我们又在里面再次调用了fn函数,在fn函数中我们想要打印‘枕头睡不醒’,重点来了,我们这里有一个判断条件,当这个num 的次数=10 的时候,我们就终止函数return掉,然后num++,也就是每次执行完之后num值+1。这样就不会发生栈溢出的问题了

9、结果展示:

10、总结

递归就是如果一个函数在内部可以调用其本身,那么这个函数就是递归函数,记住使用递归的时候一定要加return哦!防止出现‘栈溢出’的问题

相关内容

热门资讯

埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...
长白山自助游攻略 吉林长白山游... 昨天介绍了西坡的景点详细请看链接:一个人的旅行,据说能看到长白山天池全凭运气,您的运气如何?今日介绍...
脚上的穴位图 脚面经络图对应的... 人体穴位作用图解大全更清晰直观的标注了各个人体穴位的作用,包括头部穴位图、胸部穴位图、背部穴位图、胳...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...
埃菲尔铁塔在哪 中国仿建埃菲尔... 2019年4月26日,广西南宁市,街头惊现一座巨型山寨版埃菲尔铁塔,高约20米,白色塔身,造型逼真,...
苗族的传统节日 贵州苗族节日有... 【岜沙苗族芦笙节】岜沙,苗语叫“分送”,距从江县城7.5公里,是世界上最崇拜树木并以树为神的枪手部落...
应用未安装解决办法 平板应用未... ---IT小技术,每天Get一个小技能!一、前言描述苹果IPad2居然不能安装怎么办?与此IPad不...