当前位置: 首页 > news >正文

javascript基础教程_JavaScript基础教程(七)函数的编写与使用

71811659082ba1bd6f6a14b5e262794e.png

函数的编写与使用

在程序设计语言中函数是一段具有特殊功能的代码,同时也是一组可以重复使用的代码。通过函数这一对象的使用,进一步提高了程序开发的模块化与高度多的代码复用性。各种程序设计语言都对函数的定义及使用有着严格的语法规则。本文主要介绍如何在JavaScript中定义函数、使用函数,并对递归函数这一特殊类型函数进行说明。


JavaScript函数基本语法

JavaScript中所定义的函数主要由函数定义关键字、函数名称、函数参数、执行代码段与函数返回值5部分所组成。同时要求函数在使用过程中需要先定义函数,再调用函数。JavaScript函数定义基本语法描述如下:

4f9b0d5cb54ffdc7b7817dda42ea381b.png

JavaScript函数定义基本语法

JavaScript函数定义基本语法描述如上图,说明如下:

6ed1690b65a7b7bf67e104647339e247.png

函数定义语法说明


函数调用与形参&实参

函数定义完成之后,就可以通过调用该函数完成特定的功能。函数调用方式较为简单,只需要给出函数名称与所传递参数,如果参数为空,只需要给出名称后面的括号即可。关于参数部分需要注意形参与实参概念的区分。其中在函数定义中用于解释说明语言的参数为形参。在函数调用过程中替代形参参与实际运算的参数为实参。示例说明如下:

0f7e41f6dc24adc97b765c87c71b07bb.png

形参与实参示例说明


匿名函数

匿名函数(Anonymous function),顾名思义是指没有名字的函数,即在上面给出的基本语法中functionName部分可以省略的函数。在JavaScript中提供两类基本匿名函数定义方式,一种是将匿名函数封装为表达式,一种是将匿名函数赋值给变量形式。两类匿名函数基本语法描述如下:

87168929c6dff9e2b3ab68910798de57.png

匿名函数的定义形式

匿名函数定义形式描述如上图所示,上文中计算解决值函数我们可以使用两种方法改写为匿名函数,实现描述如下:

36d2b3b05e56d672c44326269b938b8b.png

匿名函数使用实例


递归函数

递归函数是一类特殊的函数类型,简单理解即为在一个函数的内部调用了该函数自身。在使用递归函数是需要注意产生递归的条件与递归终止的条件。如同循环控制语句一样,没有递归终止的条件,程序将会一直占用资源,无法结束释放资源。递归函数的说明可以从阶乘的计算这一案例展开说明。阶乘计算过程描述如下:

e7a7ac8481fa7019943cdb1c3f63be55.png

阶乘计算原理

阶乘计算过程描述如上图所示,我们可知阶乘问题的解决主要在于递推关系的挖掘与终止条件的确定。本例中递推关系为N!=N*(N-1)!,终止条件为1!=1;在明确这两点之后我们可以编写递归函数实现问题求解。递归函数描述如下图:

98dcf556871ce9bbdca7da2a3027f273.png

阶乘问题的递归求解编程实现


经典递归问题举例

爬楼梯问题是使用递归算法进行问题求解的经典案例之一,爬楼梯问题主要只是假设有N阶楼梯,需要从最底层爬到最高层,在上楼过程中每步只允许上1层或者2层,计算爬到N层总共方法有多少种?

88e869e6b4af8fa72317d3d81ec497ad.png

爬楼梯方法问题

爬楼梯方法问题采用递归思想还是比较简单的,我们可以从小人最后一步考虑。小人上到最高层N层时只能有两种方法:

①从N-2层跨越2层到达N层;

②从N-1层跨越1层到达N层;

则计算到达N层的方法f(n)就等于到达N-1层方法f(n-1)与达N-2层方法f(n-2)之和。这就找到了我们进行递推的关系式,终止条件即为f(1)=1和f(2)=2;

因此我们可以编程实现计算,实现代码如下:

f87ed5635e7890b1f4f4a632b9d077d9.png

爬楼梯递归求解代码


本头条号长期关注编程资讯分享;编程课程、素材、代码分享及编程培训。如果您对以上方面有兴趣或代码错误、建议与意见,可以联系作者,共同探讨。更多程序设计相关教程及实例分享,期待大家关注与阅读!JavaScript基础教程系列教程链接如下:

JavaScript基础教程(六)流程控制之循环语句

JavaScript基础教程(五)流程控制之条件语句

相关文章:

  • 爱的距离 ---"千里之外"
  • win7开机慢_[Windows] 【老旧电脑的福音】WIN10LTSB2015开机7秒
  • Mozilla Firefox 提高速度的方法
  • 电脑卡反应慢怎么处理_如果电脑不能读取SD卡怎么办
  • 一个批量更改文件名的Python脚本
  • iphone开机白苹果_苹果iPhone6s开机白苹果进不去是怎么回事?
  • win10命令提示符怎么打开_技巧,win10蓝屏SYSTEM_PTE_MISUSE怎么解决
  • be confident of/in/with应该如何区分?
  • xgboost算法_【模型篇】XGBoost模型
  • sqlserver2000内存突破4g_荣耀Play4T系列发布:麒麟810加持! 4G时代的终结者
  • 我的垃圾培训造就众多高中学历者高薪就业
  • hdmi接口有什么用_当贝投影仪HDMI(ARC)接口是什么意思?
  • English中一些常用近意词的区别
  • qq修改实名认证已达上限_王者荣耀实名认证修改方法
  • js怎么写返回的值赋给某个hidden的值_如何写一个Android inline hook框架
  • -------------------- 第二讲-------- 第一节------在此给出链表的基本操作
  • 「译」Node.js Streams 基础
  • 【划重点】MySQL技术内幕:InnoDB存储引擎
  • 4月23日世界读书日 网络营销论坛推荐《正在爆发的营销革命》
  • Angularjs之国际化
  • bootstrap创建登录注册页面
  • EventListener原理
  • export和import的用法总结
  • Git同步原始仓库到Fork仓库中
  • golang中接口赋值与方法集
  • Java反射-动态类加载和重新加载
  • mysql_config not found
  • NSTimer学习笔记
  • spring cloud gateway 源码解析(4)跨域问题处理
  • Three.js 再探 - 写一个跳一跳极简版游戏
  • Twitter赢在开放,三年创造奇迹
  • 如何编写一个可升级的智能合约
  • 推荐一款sublime text 3 支持JSX和es201x 代码格式化的插件
  • Java总结 - String - 这篇请使劲喷我
  • #我与Java虚拟机的故事#连载02:“小蓝”陪伴的日日夜夜
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (9)STL算法之逆转旋转
  • (超简单)使用vuepress搭建自己的博客并部署到github pages上
  • (附源码)springboot炼糖厂地磅全自动控制系统 毕业设计 341357
  • (四)c52学习之旅-流水LED灯
  • (四)TensorRT | 基于 GPU 端的 Python 推理
  • (五)Python 垃圾回收机制
  • (转) Android中ViewStub组件使用
  • (转)Spring4.2.5+Hibernate4.3.11+Struts1.3.8集成方案一
  • (转)母版页和相对路径
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .NET delegate 委托 、 Event 事件
  • .NET MVC第三章、三种传值方式
  • .net MySql
  • .NET6实现破解Modbus poll点表配置文件
  • .Net7 环境安装配置
  • .w文件怎么转成html文件,使用pandoc进行Word与Markdown文件转化
  • @SentinelResource详解
  • [ C++ ] template 模板进阶 (特化,分离编译)
  • [ vulhub漏洞复现篇 ] JBOSS AS 5.x/6.x反序列化远程代码执行漏洞CVE-2017-12149