js函数分类的理解笔记

目录

匿名函数

递归函数

回调函数

构造函数

闭包函数 

函数柯里化


匿名函数

一般来说  函数结构如下:

function  fn(callback){ console.log('do something')};

 一般来说,关键字,函数名,参数名,函数体四件东西缺一不可。但是呢

如下图, 这样写她也不会报错。他甚至还可以调用

 这样子叫做匿名函数的自运行.(即创建出来,立即执行)

优点:函数内部的变量不会对外部造成污染。(解释就是我们都用x作为变量,我用不影响你用)

(function(){

var x=10; var y=10;

console.log(x+y);

})()
(function(){

var x=10; var y=10;

console.log(x*y);

})()
//上述两个是完全独立的作用域,彼此不会相互干扰

缺点:代码之间很难通信(无法访问对方内部变量)

()的作用

在匿名函数的自运行中(function(){....}),这样的方式,将函数声明成了待执行的表达式

(function(){....})()-----这种方式相当于,我们拿到了函数本身,并进行函数调用;

由此我们可以到达一个思路,将函数的声明,转换为一个表达式。

+function(){.....}()//用的多

function(){.....}()

~function(){.....}()

void function(){.....}()

delete function(){.....}()

这些均可以实现函数的自运行和调用

递归函数

我们写一个经典递归函数的例子

//N!
//递归即传递回归  
function fn(N){
    if(N==1) return 1;//回归
    return N*fn(N-1);//传递
}

任何一个递归函数总会在某个节点停止传递,并且返回结果。

回调函数

我们由一个问题引出回调函数。

正常来说下面这两个函数,是依次执行。

然后我们为了提升代码执行效率,我们将函数修改成异步的操作

 

 因为添加了定时器,彼此构成了异步,异步函数的特点就是代码执行的不需要排队,(可以并行,提升了执行效率)

但是,如果我们不想让他们的输出变得和原来一样呢?

 我们把函数放到另一个函数内就行了。这个过程实现了回调。

回调函数总结

 如图,我们想要达到每个人的代码执行前,都要执行一次工具函数,这里隐藏了

xiaobai();  xiaohuang();xiaolv();三个函数 

对该公共函数,我们给工具函数一个参数,在函数内部进行回调。

构造函数

函数除了可以被当作函数,也可以视作一个对象

当我们通过new创建时。

function Fn(){
    
}
let obj=new Fn();//这里的Fn是一个构造函数。

我们习惯上构造函数的首字母需要大写。

构造函数会牵扯到相关dom操作。

目前的es中已经可以实现通过class内部写构造函数

闭包函数 

关于函数的闭包,我们在小学二年级的时候,老师不让进行函数内定义函数。但是,这种方式允许有。

首先

function a(){
    let x=1;
    function b(){
        console.log(x);
    }
    b();//我们可以在这个位置执行调用函数
}
b();//但这样我们就不能使用了,b()不是全局函数,无法在全局范围调用函数b

为了解决这一问题

function a(){
    let x=1;
       return function b(){
            console.log(x);
        }
}
let c=a();
C();//

关于函数c我们知道他和b的关系如下图所示。

 这个函数里,函数a形成的作用域,叫做闭包。闭包内的私有资源,无法直接在外部访问,但是可以间接访问,函数b叫闭包函数。

函数柯里化

柯里是个人。

 函数柯里化,利用闭包来保存一个临时变量。就是套娃。这部分我深入了解了在做补充

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值