博客列表 >函数与闭包

函数与闭包

手机用户1607314868
手机用户1607314868原创
2021年01月05日 19:00:00568浏览

变量和常量

变量使用let声明,初始化不用赋值,也可以任意更改值。
常量使用const声明,初始化必须赋值,一旦赋值,之后就不能再更新值

  1. let name;
  2. name=1;
  3. console.log(name);
  4. const a=5;
  5. //再赋值就会报错
  6. a=6;
标识符
  • 必须是字母,数字,下划线,$
  • 严格区分大小写
  • 不得使用关键字和保留字

命名方案:js推荐使用小驼峰式

高阶函数

使用函数为参数或者将函数作为返回值的函数就是高阶函数
1.回调函数

变量类型
  1. 原始类型:字符串,数值,布尔,underfined,null
    判断类型用 typeof 变量名
  2. 引用类型: 数组,对象,函数
  • 判断是否为数组 array.isArray(数组);
  • 判断是否为对象
    对象名 instanceof Object;
  • 判断是否为函数
    typeof 函数名
  1. document.addEventListener("click",function(){
  2. alert("hello world~");
  3. });

2.偏函数

  1. let sum=function(a,b){
  2. return function(c,d){
  3. return a+b+c+d;
  4. }
  5. }
  6. let f1=sum(1,2);
  7. console.log(f1(3,4));

3.柯里化

  1. //柯里化
  2. sum=function(a){
  3. return function(b){
  4. return function(c){
  5. return function(d){
  6. return a+b+c+d;
  7. }
  8. }
  9. }
  10. }
  11. //简化了调用参数
  12. let res=sum(1)(2)(3)(4);
  13. console.log(res);

4.纯函数
独立于调用上下文,返回值只能受到传入的参数影响

  1. let sum=function(a,b){
  2. return a+b;
  3. }

箭头函数

  1. let sum=function(a,b){
  2. return a+b;
  3. }
  4. //箭头函数用来简化 匿名函数 的声明
  5. let sum=(a,b)=>{a+b};

没有参数则必须有(),只有一个参数可以不写(),返回值只有一条语句可以不写return。
注意:箭头函数没有原型属性 prototype 不能当构造函数用。箭头函数中的this,始终与它的上下文绑定

闭包

js三种作用域:全局,函数,块
//块作用域

  1. {
  2. let a=1;
  3. const B="world";
  4. }
  5. //外部无法调用
  6. console.log(a,B);

能够访问自由变量的函数就是闭包
什么是自由变量?

  1. let num=100;//既不属于参数变量又不属于私有变量就是自由变量
  2. function add(a,b){
  3. //a,b参数变量
  4. //私有变量
  5. let t=0;
  6. return t+a+b+num;
  7. }

子函数就是闭包,闭包就是子函数

  1. function a(){
  2. //n相对于a()是私有变量
  3. let n=10;
  4. // 这个返回的子函数就是闭包
  5. return function (){
  6. return n;
  7. }
  8. }
  9. console.log(a()());

立即执行

就是再函数后跟()

  1. //声明完直接调用
  2. (function sum(a,b){
  3. console.log(a+b);
  4. })(1,2);
声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议