首页 > 其他分享 >js的中的函数(一)

js的中的函数(一)

时间:2023-07-04 10:44:43浏览次数:34  
标签:function return 函数 js 参数 var array

函数的定义

函数本质上是自变量和因变量之间关系的一种抽象描述,在JavaScript中我们这样定义一个函数:

  function add(a,b){
      return a + b;
  }

上述add函数的定义如下:

  • function指出这是一个函数定义;
  • add是函数的名称;
  • (a,b)括号内列出函数的参数,多个参数以,分隔;
  • { ... }之间的代码是函数体,可以包含若干语句,甚至可以没有任何语句。

请注意,函数体内部的语句在执行时,一旦执行到return时,函数就执行完毕,并将结果返回。因此,函数内部通过条件判断和循环可以实现非常复杂的逻辑。 如果没有return语句,函数执行完毕后也会返回结果,只是结果为undefined。

还有另外一种定义函数的方式:

  var add = function(a,b){
      return a + b;
  }
                

上述代码所示,function(){...}函数是一个匿名函数。将一个匿名函数赋值给一个变量,我们就可以使用它对函数进行调用。两种定义函数的方法是 等价的。

arguments

在函数体的内部,我们可以通过一个内置的arguments关键字查看函数被调用时的所有参数。

function getArgs(a,b){
      //只有a,b接收到了参数
      console.log(a,b);
      for (let arg of arguments){
          console.log("arg:",arg); 
      }
  }
  getArgs(2,4,6); //参数a等于2,参数b等于4,arguments 包含2,4,6
  getArgs(2);   //参数a等于2,参数b等于undefined,arguments 只有2

可变参数

如果函数接收的参数列表长度是不确定的,我们可以引入一个可变参数接收,方便对参数的操作

  function getVarArgs(a,b,...rest){
      console.log(a,b);
      if (rest){
          for (let item of rest){
              console.log(item)
          }
      }
  }
  getVarArgs(11,14);
  getVarArgs(11,14,17,18);

上述代码所示,如果a,b参数是确定的,而后续的参数是不确定的,就可以用...rest的可变参数进行接收。在函数体内部rest可以看成是一个数组, 操作非常方便。

高阶函数

  定义函数的时候,我们把匿名函数赋值给了一个变量。实际上,在JavaScript中,我们可以把一个函数等同于一个变量看待。在定义函数的时候,函数的参数可以接收一个变量,当然也可以接收另外一个函数作为它的参数。我们 把这个接收函数参数的函数称为高阶函数。这个定义听起来似乎有些拗口,请看如下示例:

  function add(a,b,func){
      return func(a) + func(b);
  }
  add(-10,2,Math.abs);  //返回12

上述代码中,add就是一个高阶函数,它接收两个数字和一个函数。

map()

JavaScript中,绑定到对象上的函数我们通常成为方法。map()作为数组的一个映射方法,实际上是一个函数,它可以接收一个函数作为参数。

  // 映射函数
  var array = [3,6,7,8,9];
  var r = array.map(function(x){
      return x*x;
  })
  r;  //返回[9,36,49,64,81]

上述代码所示,数组的map方法接收了一个函数,这个函数的功能是接收一个数字,经过处理再输出这个数字的平方。

reduce()

reduce()是数组的一个聚合方法,它将数组所有的元素进行聚合。

  var array = [3,6,7,8,9];
  var r = array.reduce(function(s,x){
      return s = s + x;
  },0)
  r;  //返回 33

上述代码显示,数组的reduce方法接收了一个函数,这个函数的第一个参数是聚合的结果,第二个参数是数组的元素。reduce方法的另一个参数表示聚合的初始值,可省略,默认为0。

filter()

filter()是数组的一个过滤方法,他将数组的所有元素按给定的规则进行过滤。

  var array = [3,6,7,8,9];
  var r = array.filter(function(x){
      return x>6;
  });
  r;  //返回[7,8,9]

sort()

sort()是数组的一个排序方法,它将数组的所有元素按给定的规则进行排序。

  var r = ["1.81","1.78","1.83","1.75","1.86","1.72"];
  r.sort(function(a,b){
      return parseFloat(a)-parseFloat(b);
  })
  r; //返回["1.72","1.75","1.78","1.81","1.83","1.86"]

上述代码显示,sort方法接收了一个比较函数。

find()

find()是数组的一个查找方法,它查询数组中满足给定条件的第一个元素

  var array = [3,6,7,8,9];
  var r = array.find(function(x){
      return x>7;
  })
  r;  //8

其它

findIndex()查询数组中满足给定条件的第一个元素的索引,every()确定数组中的所有元素是否满足给定条件

  var array = [3,6,7,8,9];
  var r = array.findIndex(function(x){
      return x>7;
  })
  r; //3
  var r1 = array.every(function(x){
      return x > -2 ;
  });
  r1; //true;

文章同时发表在:码农编程网 欢迎访问

本节重点:

  • js函数的定义
  • 什么是高阶函数,高阶函数的定义和使用;
  • 常见的高阶函数和应用。

标签:function,return,函数,js,参数,var,array
From: https://www.cnblogs.com/qqxz/p/17525048.html

相关文章

  • Three.js教程:网格模型
    推荐:将NSDT场景编辑器加到你的3D工具链工具集:NSDT简石数字孪生网格模型(三角形概念)本节课给大家演示网格模型Mesh渲染自定义几何体BufferGeometry的顶点坐标,通过这样一个例子帮助大家建立**三角形(面)**的概念三角形(面)网格模型Mesh其实就一个一个三角形(面)拼接构成。使......
  • 低能线性筛法不会梦到上流积性函数
    因为发现没有人整理这个所以就来写一份。首先积性函数我们需要知道两个部分。第一个部分是质数怎么做。第二个部分是质数的次幂怎么做。然后这两个部分一般会有定义。当然我们很头疼的是用狄利克雷卷积卷出来的积性函数应该怎么计算。首先是质数怎么做,因为质数的因数只有质......
  • vue项目中的package.json的private选项的作用
    {"name":"项目名称","description":"描述","version":"版本","private":true,"author":"testTeam","license":"MIT",}如果你在你的package.j......
  • 内置函数print-输出
    1.说明print内置函数是builtins模块的函数,用于向标准输出、文件打印数据 2.示例1help(print)2'''3Helponbuilt-infunctionprintinmodulebuiltins:45print(*args,sep='',end='\n',file=None,flush=False)6Printsthevalues......
  • 内置函数input
    1.通过help函数查看input的docstring1#1.通过内置函数help查看input函数的docstring2'''3input(prompt='',/)4Readastringfromstandardinput.Thetrailingnewlineisstripped.56Thepromptstring,ifgiven,isprinted......
  • C++面试八股文:如何实现一个strncpy函数?
    某日二师兄参加XXX科技公司的C++工程师开发岗位第31面:面试官:strcpy函数使用过吧?二师兄:用过。面试官:这个函数有什么作用?二师兄:主要用做字符串复制,将于字符从一个位置复制到另一个位置。面试官:strncpy函数也使用过吧,和strcpy有何不同?二师兄:strncpy多了一个size_t的参数,用于避......
  • 40.什么情况下会调用拷贝构造函数
    40.什么情况下会调用拷贝构造函数用类的一个实例化对象去初始化另一个对象的时候函数的参数是类的对象时(非引用传递)函数的返回值是函数体内局部对象的类的对象时,此时虽然发生(NamedreturnValue优化)NRV优化,但是由于返回方式是值传递,所以会在返回值的地方调用拷贝构造函数......
  • 34.C++有哪几种的构造函数
    34.C++有哪几种的构造函数C++中的构造函数可以分为4类:默认构造函数:在没有显式定义构造函数时,C++会自动生成一个默认构造函数,该函数没有参数,不执行任何操作。初始化构造函数(有参数)拷贝构造函数:当使用现有对象初始化新对象时,拷贝构造函数被调用。它的语法是在函数声明时使用一......
  • 13.宏定义和函数有何区别?
    宏在预处理阶段完成替换,之后被替换的文本参与编译,相当于直接插入了代码,运行时不存在函数调用,执行起来更快;函数调用在运行时需要跳转到具体调用函数。宏定义属于在结构中插入代码,没有返回值;函数调用具有返回值。宏定义参数没有类型,不进行类型检查;函数参数具有类型,需要检查类型。......
  • 【JS基础】手写Promise.all
    我还以为是先手写promise,再实现all方法呢,没想到这么简单。。。/***手写promise.all*/functionpromiseAll(args){returnnewPromise((resolve,reject)=>{constpromiseResult=[]letiteratorIndex=0letfullCount=0f......