📌 函数基础与种类

四函数基础与种类/形实参及映射/变量类型 - 图1> 函数定义方式

对代码块进行封装,方便反复使用

  1. // 函数声明
  2. function 函数名() {
  3. ...
  4. 执行代码块
  5. }
  6. // 匿名函数表达式-函数字面量
  7. // 表达式定义方式 会自动忽略函数名 ——> 即匿名函数
  8. var 函数名 = function() {
  9. ...
  10. 执行代码块
  11. }
  • 函数字面量(匿名函数表达式)定义函数可以是命名的,也可以是匿名的,函数名在作用域外是不可访问获取的

📌 形实参及映射

  • 🔧 函数式编程

一个固定的功能或程序段被封装的过程,实现一个固定的功能或程序,整个封装体中需要一个入口和一个出口。
入口就是函数的参数,出口就是返回值

函数的组成 多个实参、形参,参数间用逗号隔开

  1. // 定义
  2. function 函数名(形参1,形参2,形参3...) {
  3. 代码块
  4. }
  5. // 调用
  6. 函数名( 实参1,实参2,实参3.... )
  • 形参形式上占位,声明时的参数
  • 实参实际的数值,调用时的参数
  • 形参与实参匹配,JS中可以不一致
    • 实参 == 形参 ——> 按顺序依次赋值
    • 实参 > 形参 ——> 按顺序赋值,多余实参丢弃
    • 实参 < 形参 ——> 按顺序赋值,未接收的形参默认undefined

arguments **函数内置对象**

  • 接收函数所有传入的实参,只能在函数中使用
  • 伪数组:与数组相似,具有数组的特性,可通过索引取值
    • 有长度(具有length属性,arguments.length)
    • 包括了所有传入的实参,可以通过索引值获取元素


函数的返回值return 函数调用整体的值 == 函数的返回值 == return后面的数据

  • 如果没有写return,函数内部会隐式添加return,值是undefined
  • return可以中止函数运行,return后面的语句不会执行

📌 变量类型

作用域 提高程序可靠性,减少命名冲突

  • 全局作用域:整个页面
  • 局部作用域:函数只有在调用的时候可以在全局作用域中划分出局部作用域

变量类型

  • 全局变量:全局作用域声明的变量,函数内部没有声明即赋值的变量
    • 使用范围:全局作用域中任何位置都可以使用
  • 局部变量:局部作用域中声明的变量
    • 使用范围:当前局部作用域才可以使用

📋 课后作业

1.定义一个函数,接收用户输入的饮料名称,通过函数返回对应的价格? 2.定义一个函数,接收用户输入的运算符号(+、-、*、/、%)及数字,利用函数制作简易计算器,并返回结果? 3.定义一个函数,接收用户输入的数字N,不能使用for循环,计算出N的阶乘? 4.定义一个函数,接收用户输入的N,不能使用for循环,算出斐波那契数列第N位的数字

  1. //定义一个函数,接收用户输入的饮料名称,通过函数返回对应的价格?-------------------------------------------------
  2. var userDrink = window.prompt('请输入您要查询的饮料名称?')
  3. priceInquiry(userDrink)
  4. function priceInquiry(drink) {
  5. switch (drink) {
  6. case '可乐':
  7. return document.write(drink + '价格是$2.00')
  8. case '雪碧':
  9. return document.write(drink + '价格是$3.00')
  10. case '果粒橙':
  11. return document.write(drink + '价格是$5.00')
  12. case '雪花啤酒':
  13. return document.write(drink + '价格是$2.00')
  14. case '柠檬水':
  15. return document.write(drink + '价格是$4.00')
  16. case '苏打水':
  17. return document.write(drink + '价格是$1.00')
  18. case '健力宝':
  19. return document.write(drink + '价格是$5.00')
  20. default:
  21. return document.write('您查询的饮料暂时没有!')
  22. }
  23. }
  24. ------------------------------------------------------------------------------------------------
  25. //定义一个函数,接收用户输入的运算符号(+、-、*、/、%)及数字,利用函数制作简易计算器,并返回结果?
  26. var userNum1 = parseFloat(window.prompt('请输入第一个数字?')),
  27. operator = window.prompt('请输入运算符(+、-、*、/、%)?'),
  28. userNum2 = parseFloat(window.prompt('请输入第二个数字?'));
  29. compute(userNum1, operator, userNum2)
  30. function compute(num1, operator, num2) {
  31. switch (operator) {
  32. case '+':
  33. return document.write((num1 + num2).toFixed(2));
  34. case '-':
  35. return document.write((num1 - num2).toFixed(2));
  36. case '*':
  37. return document.write((num1 * num2).toFixed(2));
  38. case '/':
  39. return document.write((num1 / num2).toFixed(2));
  40. case '%':
  41. return document.write((num1 % num2).toFixed(2));
  42. default:
  43. return document.write((num1 + num2).toFixed(2));
  44. }
  45. }
  46. ------------------------------------------------------------------------------------------------
  47. //定义一个函数,接收用户输入的数字N,不能使用for循环,计算出N的阶乘?
  48. var userNum = parseInt(window.prompt('请输入需要计算阶乘的数字?'))
  49. document.write(factorial(userNum))
  50. function factorial(num) {
  51. if (num <= 0) {
  52. return 1
  53. }
  54. return num * factorial(num - 1)
  55. }
  56. --------------------------------------------------------------------------------------------------
  57. //定义一个函数,接收用户输入的N,不能使用for循环,算出斐波那契数列第N位的数字
  58. var userNum = parseInt(window.prompt('请输入要查询斐波那契数列第N位的数字?'))
  59. document.write(fibonacci(userNum))
  60. function fibonacci(num) {
  61. if (num <= 2) {
  62. return 1
  63. }
  64. return fibonacci(num - 1) + fibonacci(num - 2)
  65. }