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的函数详解相关推荐

  1. vue动画过渡 javascript钩子函数详解

    vue动画过渡js钩子函数详解 前言 js钩子函数运行时间 js钩子函数的过渡或动画 总结 结语 前言 转载请注明出处并附上链接. 本文中,enter(leave)过程指的是beforeEnter.e ...

  2. JavaScript valueOf() 函数详解

    valueOf()函数用于返回指定对象的原始值. 该方法属于Object对象,由于所有的对象都"继承"了Object的对象实例,因此几乎所有的实例对象都可以使用该方法. 所有主流浏 ...

  3. JavaScript闭包函数详解

    目录 闭包函数 变量作用域 闭包的概念 闭包的用途 闭包的缺点 闭包函数 变量作用域 要理解JavaScript闭包,就要先理解JavaScript的变量作用域. 变量的作用域有两种:全局的和局部的( ...

  4. javascript console 函数详解 js开发调试的利器 浏览:3201|更新:2014-05-30 09:27

    引用地址: http://jingyan.baidu.com/article/e75aca855c6419142edac6c1.html 一键约师傅 百度师傅最快的到家服务,最优质的电脑清灰! Con ...

  5. Javascript 函数详解

    Javascript 函数详解 1)函数声明: 通过关键字function定义,把函数作为变量来声明 函数声明后不会立即执行,会在我们需要的时候调用到. <script>function ...

  6. [js]JavaScript Number.toPrecision() 函数详解

    [js]JavaScript Number.toPrecision() 函数详解 JavaScript: numberObject.toPrecision( [ precision ] ) 如果没有提 ...

  7. javascript BOM对象详解

    javascript BOM对象详解 目标:本章节将分为9点详细介绍有关BOM对象的知识点 1.什么是BOM 2.BOM的构成 3.顶级对象window 4.window对象常见事件(页面加载事件和体 ...

  8. JavaScript 运行机制详解(理解同步、异步和事件循环)

    1.为什么JavaScript是单线程? JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事.那么,为什么JavaScript不能有多个线程呢?这样能提高效率啊. Java ...

  9. 好程序员技术分析JavaScript闭包特性详解

    为什么80%的码农都做不了架构师?>>>    好程序员技术分析JavaScript闭包特性详解,今天来总结一下js闭包的那些事,以及遇到的坑和解决方法,希望对你有所帮助. 是的,没 ...

最新文章

  1. [CES 2018] 上手测试:刚公布的 TPCast Plus 无线适配器
  2. asp 导出excel数据 fso 单元格格式
  3. OpenCV cv::split用法的实例(附完整代码)
  4. Educational Codeforces Round 37 G. List Of Integers (二分,容斥定律,数论)
  5. glup node 内存不够_Redis:内存被我用完了!该怎么办?
  6. mybatis 增删改查测试
  7. [笔记][随笔]近期小结
  8. jar编译成exe可执行文件【图文教程】
  9. ATT的汇编格式X86内联汇编
  10. top 命令按内存和 cpu 排序
  11. android 开机优化(类和资源预加载优化)
  12. 物联网工程导论 简单整理
  13. 发电厂电气部分第三版pdf_“十三五”普通高等教育本科规划教材 发电厂电气设备及运行(第三版) pdf epub mobi txt 下载...
  14. pandas 二维表与一维记录的转换
  15. SQLite 查询得到今天日期
  16. 电商物流快递意外延误创意海报设计PSD格式,用心良苦
  17. 《Java JDK8学习笔记》读书笔记(3)
  18. 软路由服务器安装在哪个位置,软路由安装教程_软路由安装注意事项
  19. 【群晖NAS】真·免费内网穿透方案 及踩坑合集
  20. cv2.imshow无法显示图像

热门文章

  1. 音乐平台Sparkify流失用户预测
  2. 测试接口是否支持跨域
  3. windows上传ipa文件到app store的方法​
  4. 树莓派启动出现彩虹屏快闪情况
  5. 合作协同进化算法概述(Cooperative Coevolution)
  6. 微信电商收付通所遇到的坑 基于TP5+wechatpay-guzzle-middleware开发
  7. 永恒之塔最新服务器2020,【永恒之塔5.8服务端】2020全新小结版一键端+GM方式内嵌+GM专用工具+详尽安裝构建教程...
  8. TypeError: require(...)(...) is not a function
  9. 为比亚迪撑腰的「两大武器」,成色几何?高估还是低估?
  10. leetcode5465