文章目录

  • 一、函数的概念和特点
  • 二、函数的创建和执行
  • 三、函数的参数 - 入口
  • 四、函数的返回值 - 出口
  • 五、练习

一、函数的概念和特点

  1. 函数的概念:由一堆代码组成,实现了某个功能,可以被直接调用或事件控制的代码段。在计算机中,可以将函数看做封装后的功能代码块

    比如生活中随处可见的家用电器:由一堆电路板,元器件,组装而成,能实现某一个或多个功能,可以由遥控器或开关控制的机器

  2. 函数的特点

    • 选择执行:封装之后,可以选择在将来的其他程序中使用
    • 重复执行:封装之后,可以在不同的程序或功能中重复调用
    • 忽略细节:封装之后,每次使用函数时,都不需要考虑其内部实现
  3. 组成

    • 名字
    • 功能代码
    • 入口
    • 出口

二、函数的创建和执行

  1. 创建函数 - 打包的容器

    • 声明式:

      • 声明函数的关键字:function
      • function 函数名(){...}
        • function:声明关键字
        • 函数名:函数的名字,可以用来找到这个函数
        • ():参数列表,函数的入口
        • {}:组成功能的代码,函数的执行语句
    • 赋值式:
      • 利用变量进行赋值
      • var 变量名 = function(){}
  2. 函数的执行 - 使用这个容器内的功能

    • 直接执行:名字()

      • 如:printTable()
      • 注意:任何情况下,只要 名字() 都会作为函数执行,哪怕不是函数
    • 事件执行:事件源.on事件名 = 函数
      • 如:btn.onclick = printTable
      • 如:btn.onclick = function(){...}
  3. 根据写法,函数的分类:

    • 有名函数:function fn(){...}

      • 正常函数,正常使用
    • 无名函数:function(){...}
      • 不完整函数,不允许直接使用,直接使用会报错,只能作为使用
      1. 作为 赋值式创建函数 的值:var abc = function(){}
      2. 作为 事件处理函数 使用,被事件执行:btn.onclick = function(){}
      3. 作为 实参 使用(回调函数:当一个函数A作为参数传入另一个函数B中,作为参数的函数A是函数B的回调函数):fn( function(){} )
      4. 作为 函数的返回值 使用(闭包函数:当一个函数A内部,又返回了另一个函数B,此时称函数B是函数A的闭包函数):function fun(){ return function(){} }
      5. 作为 匿名函数的函数体 使用:(function(){})()
    • 匿名函数:(function(){})()
      • 会立即自动执行
      • 利用匿名函数,生成作用域(见下章)
  4. 事件(执行函数)

    • 事件是一种行为,动作,交互的体现。需要通过某些行为主动触发,触发之后,执行对应的功能的过程

    • 鼠标类:

      • 单击: click
      • 双击: dblclick
      • 按下: mousedown
      • 抬起: mouseup
      • 移动: mousemove
      • 进入: mouseover / mouseenter
      • 离开: mouseout / mouseleave
      • 右键: contextmenu
    • 键盘类

      • 按下: keydown
      • 抬起: keyup
      • 按下并抬起: keypress
    • 页面或浏览器类

      • 滚动: scroll
      • 加载: load
      • 改变大小: resize
    • 表单类:

      • 获取焦点: focus
      • 失去焦点: blur
      • 改变内容: change
      • 输入: input
      • 提交: submit
      • 重置: reset
    • 绑定事件的方式:事件源.on事件名 = 事件处理函数。如:btn.onmousemove = function(){...}

      • 注意:当前事件应该添加给哪个事件源
      • 注意:当前事件应该怎样的行为触发

三、函数的参数 - 入口

  • 在函数定义时,我们可能会提前在函数内提前定义不同的功能的执行方式,或将来可能会处理不同的数据。
  • 在函数执行时,我们为了可以动态的向函数内部传输数据或不同的状态,让函数内部可以根据传入数据的不同,选择执行不同的功能,就此产生了参数
  1. 参数的分类

    • 函数执行时,发送的参数,叫实参
    • 函数定义时,接收的参数,叫形参
    • 实参和形参的关系:实参传给了形参,形参保存了实参,实参赋值给了形参,类似于变量赋值,形参需要遵守变量的命名规范。
      function log(text){console.log(text)
      }
      log("hello");     // hello
      log(365);           // 365
      
  2. 参数的类型:函数自身没有对参数类型进行限制,可以传入任意类型的数据(已经指定了参数类型的函数除外)
  3. 参数的个数:函数自身没有对参数个数进行限制,可以传入任意个数据(已经指定了参数个数的函数除外)
    • 当实参和形参的数量一致是:参数列表从左向右,实参和形参一一对应
    • 当形参比实参多时:多出来的形参没有接受到实参,表示没有赋值,为undefined
    • 当实参比形参多时:多出来的实参,没有被形参接收,可以使用arguments获取
  4. arguments
    • 函数内部内置的类数组对象,用来接收当前函数所有的实参。
    • 因为arguments是一个类数组,所以具有数组索引和长度
      • arguments.length:数组的长度,实参的个数
      • 解析arguments每一个数据:配合索引n,n的取值范围为:0~length-1
        • arguments[n]
      function fn(){for(var i=0;i<arguments.length;i++){console.log(arguments[i])}
      }
      fn(4,25,16,785,345,"WORLD");
      
  5. 关于参数的应用
    • 当函数的参数个数确定时,使用具体个数的形参接收即可

      // 编写函数,计算两个任意数字的和
      function sum(num1, num2){console.log(num1 + num2);
      }
      sum(4,6);       // 10
      sum(5,9);       // 14
      sum(12,23);     // 35
      
    • 当函数的参数个数不确定时,可以使用arguments获取到所有的实参
      // 编写函数,计算任意个任意数字的和
      function sum(){var s = 0;for(var i=0;i<arguments.length;i++){s += arguments[i];}console.log(s);
      }
      sum(1,2);           // 3
      sum(4,2,6,2,8,1);   // 23
      sum(16,45,21,9);    // 91
      

四、函数的返回值 - 出口

  • 当我们拥有一个处理数据的函数时,为了在函数外部能拿到函数处理的数据结果,并对数据进行二次使用或另做他用。我们给函数设置返回值,也就是添加函数的出口
  1. 设置返回值 - 关键字:

    • return 要返回的数据或变量
    • return将函数内部的执行结果,返回到函数的执行语句上,并立即结束函数执行
    • 如果一个函数没有return,那么他的返回值是undefined
      function fn(){return "hello";
      }
      console.log( fn() );        // hellofunction fun(){}
      console.log( fun() );       // undefined
  2. 返回值的类型:函数自身没有对返回值类型进行限制,可以返回任意类型的数据(已经指定了返回值类型的函数除外)
  3. 返回值的个数:因为return有结束函数的功能,所以,一个函数只能有一个返回值(如需返回多个数据,可以利用数组或对象对数据进行打包后,再做返回)
    function fn(){console.log(1);return "hello";console.log(2);
    }
    fn();       // 1
    
  4. 返回值的应用场景
    • 实现功能的函数:可以不需要返回值

      function log(text){console.log(text);
      }
      // 简化了打印功能,不需要返回值
      log("hello");     // hello
      
    • 处理数据的函数:尽量添加返回值
      function sum(a,b,c){return a+b+c;
      }
      // 计算指定数据累加和,将计算结果返回到函数外部
      console.log( sum(5,2,4) );  // 11
      

五、练习

  1. 编写一个函数,计算两个数字的和/差/积/商/余。要求:使用传参的方式
  2. 编写一个函数,计算三个不同数字的大小,按从小到大顺序打印。使用穷举法
  3. 编写任意个任意数字的求 和 或 积 的函数
  4. 编写一个函数,计算任意两个数字之间所能组成的两位数的奇数,数字必须是个位数
    比如: 计算0,3之间能组成的奇数个是01、21、03、13、23、31
  5. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换,请编写一个函数,传入原文,输出密文

四、函数的基本概念和使用相关推荐

  1. matlab 迭代 混沌与分形实验报告,实验四 函数的迭代混沌与分形.doc

    实验四 函数的迭代混沌与分形.doc 实验四函数的迭代.混沌与分形实验目的1认识函数的迭代:2了解混沌和分形迭代在数值计算中占有很重要的地位,了解和掌握它是很有必要的本实验将讨论用NEWTON迭代求方 ...

  2. C++函数重载的概念

    C++函数重载的概念 重载的起源 自然语言中,一个词可以有许多不同的含义,即该词被重载了.人们可以通过上下文来判断该词到底是哪种含义."词的重载"可以使语言更加简练.例如" ...

  3. 【Windows 应用程序开发详解】四.Windows开发基本概念和相关术语(一)

    [Windows 应用程序开发详解]四.Windows开发基本概念和相关术语 一.Windows API 二.服务.函数和例程 一.Windows API Windows API介绍: Windows ...

  4. matlab实验函数编写与程序设计,matlab实验四函数编写与程序设计

    <matlab实验四函数编写与程序设计>由会员分享,可在线阅读,更多相关<matlab实验四函数编写与程序设计(8页珍藏版)>请在金锄头文库上搜索. 1.实验四:函数编写与程序 ...

  5. 小米四曲面瀑布屏概念手机亮相:按键、开孔、边框全部消失

    今天下午,小米正式发布首款四曲瀑布屏概念手机,让"仅是一块屏幕"的未来手机形态离我们再近一些. 该机采用了四面88°超曲屏设计,让画面如水一样向四周流动,放在桌上犹如一颗晶莹的水滴 ...

  6. 原来 JS 也支持跟 Lua 语意一样的内嵌函数的闭包概念

    原来 JS 也支持跟 Lua 语意一样的内嵌函数的闭包概念. 我是从这里看来的: http://blog.dreambrook.com/soloist/archive/2005/03/13/526.a ...

  7. 函数极限的概念及性质

    没看过数列极限的可以先看看: 数列极限的概念及性质 函数极限的概念 函数 定义 函数的连续 函数的极限 函数极限的描述性定义 函数极限的定义 函数极限的几何意义 例题 函数极限的性质 三个性质 例题 ...

  8. wlan从入门到精通第四期WLAN常用概念

    wlan从入门到精通第四期WLAN常用概念 SSID的全称是Service Set Identifier,也就是服务集标识符,用于标识一个服务集,按照大部分人的理解,也就是用来标识一个可用的网路. 我 ...

  9. 7.1 函数的基本概念和定义

    7.1 函数的基本概念和定义 1.函数的基本概念 2.函数的定义和函数返回值 (2.1)无返回类型,无形参 (2.2)有参数,有返回类型 3.整理至https://appd872nnyh9503.pc ...

  10. 快手近5000员工成千万富翁;王卫自掏2500万给员工发红包,顺丰拿6.5亿元激励留岗员工;小米发布四曲瀑布屏概念手机|技术圈报...

    点击上方 "编程技术圈"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 每日英文 Sometimes, if you persist in doin ...

最新文章

  1. 最全19000+国外AE模板合集包
  2. HDLBits 系列(16)Something about Counter
  3. redis学习笔记(一): sds
  4. IBM Webpshere6(WAS6) bug发现一例
  5. Linux下串口编程基础
  6. java swing事件监听_Java swing(awt):事件监听机制的实现原理+简单示例
  7. Anaconda3使用过程中遇到的问题
  8. vue数据改变了,视图不更新不刷新问题
  9. 【机器学习】机器学习从零到掌握之十二 -- 教你使用决策树预测隐形眼镜类型
  10. swagger 修改dto注解_一文搞懂Swagger,让你明白用了Swagger的好处!!!
  11. Ora-00942:表或视图不存在
  12. 系统学习机器学习之SVM(一)
  13. ubuntu shell 直接输入密码
  14. 禁用联想笔记本电脑自带的键盘
  15. linux affinity,Linux CPU Affinity
  16. 调出cmd输入时的光标
  17. 关于使用xftp上传可读文件夹权限不足的问题
  18. 联通服务器光信号亮红灯移动,联通los红灯闪啥意思(图文)
  19. 复旦大学计算机学院教师简介,复旦大学计算机科学技术学院导师教师师资介绍简介-危辉...
  20. 51单片机DAC数模转换

热门文章

  1. stm32—超声波传感器
  2. css3价格斜切_CSS秘密花园:斜切角
  3. LabVIEW操作鼠标滚轮放大/缩小图像
  4. 【CF917E】Upside Down(哈希二分)(后缀数组)(AC自动机)
  5. 采购入库单扫码校验,收货校验发现供应商送货错误。思迅安卓盘点机PDA
  6. 【报告分享】2020年中国宠物消费市场分析报告-IT桔子(附下载)
  7. P3975 [TJOI2015]弦论 - 后缀自动机(SAM)
  8. root账号密码遗忘解决
  9. ResNet王者回归!谷歌、伯克利联合发文:它当初输给EfficientNets不是架构问题
  10. Batch Size 对训练的影响