2.ES6(函数:6种)

函数定义 :定义/高阶函数
函数参数 :剩余参数
函数调用/返回值 :调两种用方式,6种函数
函数构成:闭包函数,递归函数

函数定义

函数定义:
1.函数是对象
2.函数的数据类型为Function,引用类型,存储在堆中;函数名存在栈
3.函数内部有__proto__对象 (🏁????待定)秀逗麻袋
构建函数=创建函数对象,等等,需要等等

JS中函数有4中定义方式
1.命名函数
2.匿名函数
3.new Function(参数1,参数2,函数体)1)了解即可
(2)函数体为字符串类型
(3var lzy=new Function("x""y""console.log(x+y)")

4.箭头函数
(1)代码
1.命名箭头函数:var lzy=(行参)=>{   }
2.匿名箭头函数:(行参)=>{   }

(2)定义
1.不能用argument接收实参,只能用剩余参数接收实参
2.this关键字:箭头函数内没有this关键字,this指向「定义区域」的this
    例如:
   (箭头函数写在其他函数内:箭头函数内this=其他函数内this)
   (箭头函数写在对象内:箭头函数内this指向window;(因为对象花括号不是块级作用域))
3.简写代码:如果参数只有一个,可以将参数(小括号)省略
4.简写代码:如果返回值return只有一行代码,可以将return{花括号}省略

(3)调用/调用函数时本身的返回值
1.未简写时:调用函数时本身的返回值为return跟随的值;
2.简写时:调用函数时本身的返回值为执行代码结果;

高阶函数
(回调函数):函数a的实参传递进一个函数b, 函数a称为高阶函数
(递归函数,闭包函数):函数a的返回值为一个函数b, 函数a称为高阶函数

函数参数:剩余参数

1.定义:当函数中,实参个数多余行参个数时,可以将多余的实参放入到(…行参)数组中
1.使用位置:普通函数/箭头函数/ES6解构赋值数组/ES6解构赋值对象

代码
1.function lzy(a,...b){ }      lzy(1234)
2.let {a,...b}={ 1234}
3.let [a,...b]=[ 1234]

函数调用/返回值

函数调用

函数调用代码执行队列
1.普通函数函数名()
2.对象的方法对象名.函数名()
3.构造函数new 实例对象 ()
4.绑定事件函数(回调函数),点击后调用
5.定时器函数(回调函数),定时时间到了调用
6.立即执行函数(function)()执行队列在栈

改变函数this指向并且调用:
链接:this处

函数构成:闭包函数,递归函数

闭包函数:闭包可以访问另一个函数内的局部变量
(1)定义:
1.被访问的局部变量函数称为闭包函数
2.函数作为返回值使用(高阶函数):为闭包函数(全局作用域可以使用父函数局部变量)
3.一般两个小括号的都是闭包
4.闭包函数并不是执行完毕后销毁局部变量,而是要等到外部调用后在销毁
5.总结:(调用父亲函数时,相当于把儿子函数拿到全局作用域定义,所以实现了全局作用域下的儿子函数使用父亲函数变量)

(2)闭包出现场景:

1.function 父亲(){
      function 儿子() {  }
  }
  儿子函数可以使用父亲函数变量
  
2.function 父亲 (){
  return  function 儿子(){ };
}
父亲()(); 父亲函数种的局部变量通过儿子函数传递后可以在全局变量中使用;

(3)使用场景:循环中嵌套函数时
循环注册点击事件: 点击按钮获得其索引号
(需要用其他变量来区分因栈和堆的执行队列问题导致获取不到当前for循环的次数值时候,用立即执行函数替代,将循环次数值用行参传递进立即执行函数,在立即执行函数中在写堆中函数)

递归函数

1.定义:函数可以在自己函数体内调用自己
2.类似:跟循环一致的代码状态
3.结束循环递归函数:需要加if条件判断,然后return退出循环递归函数,否则出现栈溢出
4.一般书写为if-true内return退出,if-false内return结果值并且再次调用

用于:
1.知道逻辑规律后,不需要从1开始写;(结果倒叙表达)
2.深拷贝对象(当算法学)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值