JavaScript的函数详解
JavaScript的函数详解
- 一、什么是函数
- 二、函数的使用
- 1、函数的声明
- 2、函数的调用
- 3、函数的参数:参入运算的数据
- (1)形参(形式参数)
- (2)实参(实在参数):
- (3)参数之间的数据传递
- (4)参数的数量
- 4、函数的返回值:函数可以有返回值,也可以没有返回值。
- 三、arguments的使用
- 四、函数进阶
- 1、函数表达式
- 2、回调函数
- 3、递归调用
一、什么是函数
函数是一个独立的功能模块,可以重复使用,维护方便。
在编写代码时,可能会出现非常多的相同代码,或者功能类似的代码,这些代码可能需要大量重复使用,此时就可以使用JavaScript中的函数。
二、函数的使用
1、函数的声明
基本语法格式如下:
function 函数名([参数]){函数体语句;}
(1)‘function’:是关键字,必须小写。
(2)‘函数名’:用户标识符,建议采用驼峰命名(第一个单词是动词,后面的单词首字母大写) ,做到’见名知义’。
(3)‘参数’:函数可以有参数也可以没有参数。’()'不能省略的。
(4)’{}’:表示函数的作用范围(可写可不写)。
2、函数的调用
(1)直接调用:函数名(参数)
(2)触发事件调用:事件名 = 函数名(参数)
function getSum(a,b){var sum = a+b;return sum;
}
console.log('sum=',getSum(2,3));
3、函数的参数:参入运算的数据
(1)形参(形式参数)
在函数定义时出现在函数首部的参数,只是占位符,没有实际的数据
(2)实参(实在参数):
在函数调用时出现在函数首部的参数,是有确定值的变量或常量
(3)参数之间的数据传递
实参将数据传递给形参(按值传递),传递的方向是单向的(实参–>形参)
数据传递时实参和形参按从左到右一一对应匹配与名称无关
(4)参数的数量
函数的实参和形参的个数可以不同
A、实参的个数多于形参的个数:函数正常运行,多余的实参被忽略
B、实参的个数少于形参的个数: 多余的形参会变成undefined的变量
参数传递过程如下:
function swap(a,b){console.log("形参:a="+a+",实参:b="+b);var temp = a;a = b;b = temp;console.log("形参:a="+a+",实参:b="+b);
}
var t = 10;k = 25;
console.log("实参:t="+t+",k="+k);
swap(t,k);
console.log("实参:t="+t+",k="+k);
4、函数的返回值:函数可以有返回值,也可以没有返回值。
(1)有返回值的函数:函数体中通过return语法返回一个值,这个决定程序下一步操作
(2)无返回值的函数:函数只实现某种功能,不需要返回值(函数体中没有return语句)
三、arguments的使用
当不确定函数中接收到了多少个实参的时候,可以用arguments来获取实参。这是因为arguments是当前函数的一个内置对象,所有函数都内置了一个arguments对象,该对象保存了函数调用时传递的所有的实参。
function fn() {console.log(arguments); // 输出结果:Arguments(3) [1, 2, 3, …]console.log(arguments.length); // 输出结果:3console.log(arguments[1]); // 输出结果:2}fn(1, 2, 3);
四、函数进阶
1、函数表达式
是将声明的函数赋值给一个变量,通过变量完成函数的调用和参数的传递,函数表达式的定义必须在调用前。
var sum = function(num1, num2) { // 函数表达式return num1 + num2;
};
console.log(sum(1, 2)); // 调用函数,输出结果:3
2、回调函数
指的就是一个函数A作为参数传递给一个函数B,然后在B的函数体内调用函数A。此时,称函数A为回调函数。
例如:
function cal(num1, num2, fn) {return fn(num1, num2);
}
console.log(cal(45, 55, function (a, b) {return a + b;
}));
3、递归调用
指的是一个函数在其函数体内调用自身的过程,这种函数称为递归函数。以根据用户的输入计算指定数据的阶乘为例进行讲解:
(1)什么是递归:函数自己调用自己
(2)用递归解决问题条件
A、问题可以分解,分解后得到的新问题的解法与原问题的解法相同
B、分解的过程要有明确的结束条件
(3)递归的过程:
A、自上而下分解问题:5!5!-->5*4!4! -->4*3!3!-->3*2!2!-->2*1!B、自下而上回溯得到问题的解1!-->2!-->3!-->4!-->5!
JavaScript代码实现如下:
function factorial(n) { // 定义回调函数if (n == 1) { return 1; }// 递归出return n * factorial(n - 1);}var n = prompt('求n的阶乘\n n是大于等于1的正整数,如2表示求2!。');n = parseInt(n);if (isNaN(n)) { console.log('输入的n值不合法') } else { console.log(n + '的阶乘为:' + factorial(n));
}
JavaScript的函数详解相关推荐
- vue动画过渡 javascript钩子函数详解
vue动画过渡js钩子函数详解 前言 js钩子函数运行时间 js钩子函数的过渡或动画 总结 结语 前言 转载请注明出处并附上链接. 本文中,enter(leave)过程指的是beforeEnter.e ...
- JavaScript valueOf() 函数详解
valueOf()函数用于返回指定对象的原始值. 该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法. 所有主流浏 ...
- JavaScript闭包函数详解
目录 闭包函数 变量作用域 闭包的概念 闭包的用途 闭包的缺点 闭包函数 变量作用域 要理解JavaScript闭包,就要先理解JavaScript的变量作用域. 变量的作用域有两种:全局的和局部的( ...
- javascript console 函数详解 js开发调试的利器 浏览:3201|更新:2014-05-30 09:27
引用地址: http://jingyan.baidu.com/article/e75aca855c6419142edac6c1.html 一键约师傅 百度师傅最快的到家服务,最优质的电脑清灰! Con ...
- Javascript 函数详解
Javascript 函数详解 1)函数声明: 通过关键字function定义,把函数作为变量来声明 函数声明后不会立即执行,会在我们需要的时候调用到. <script>function ...
- [js]JavaScript Number.toPrecision() 函数详解
[js]JavaScript Number.toPrecision() 函数详解 JavaScript: numberObject.toPrecision( [ precision ] ) 如果没有提 ...
- javascript BOM对象详解
javascript BOM对象详解 目标:本章节将分为9点详细介绍有关BOM对象的知识点 1.什么是BOM 2.BOM的构成 3.顶级对象window 4.window对象常见事件(页面加载事件和体 ...
- JavaScript 运行机制详解(理解同步、异步和事件循环)
1.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...
- 好程序员技术分析JavaScript闭包特性详解
为什么80%的码农都做不了架构师?>>> 好程序员技术分析JavaScript闭包特性详解,今天来总结一下js闭包的那些事,以及遇到的坑和解决方法,希望对你有所帮助. 是的,没 ...
最新文章
- [CES 2018] 上手测试:刚公布的 TPCast Plus 无线适配器
- asp 导出excel数据 fso 单元格格式
- OpenCV cv::split用法的实例(附完整代码)
- Educational Codeforces Round 37 G. List Of Integers (二分,容斥定律,数论)
- glup node 内存不够_Redis:内存被我用完了!该怎么办?
- mybatis 增删改查测试
- [笔记][随笔]近期小结
- jar编译成exe可执行文件【图文教程】
- ATT的汇编格式X86内联汇编
- top 命令按内存和 cpu 排序
- android 开机优化(类和资源预加载优化)
- 物联网工程导论 简单整理
- 发电厂电气部分第三版pdf_“十三五”普通高等教育本科规划教材 发电厂电气设备及运行(第三版) pdf epub mobi txt 下载...
- pandas 二维表与一维记录的转换
- SQLite 查询得到今天日期
- 电商物流快递意外延误创意海报设计PSD格式,用心良苦
- 《Java JDK8学习笔记》读书笔记(3)
- 软路由服务器安装在哪个位置,软路由安装教程_软路由安装注意事项
- 【群晖NAS】真·免费内网穿透方案 及踩坑合集
- cv2.imshow无法显示图像
热门文章
- 音乐平台Sparkify流失用户预测
- 测试接口是否支持跨域
- windows上传ipa文件到app store的方法​
- 树莓派启动出现彩虹屏快闪情况
- 合作协同进化算法概述(Cooperative Coevolution)
- 微信电商收付通所遇到的坑 基于TP5+wechatpay-guzzle-middleware开发
- 永恒之塔最新服务器2020,【永恒之塔5.8服务端】2020全新小结版一键端+GM方式内嵌+GM专用工具+详尽安裝构建教程...
- TypeError: require(...)(...) is not a function
- 为比亚迪撑腰的「两大武器」,成色几何?高估还是低估?
- leetcode5465