欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

day5 函数

程序员文章站 2022-07-07 17:37:39
...

函数

为什么要有函数

如果要在多个地方求1-100之间所有数的和,应该怎么做?

概念:当它被调用时执行的可重复使用的代码块。

什么是函数

函数的作用就是封装一段代码,将来可以重复使用。

就是函数,起个名字(函数名),在后续开发中可以反复调用

函数的定义

  • 函数声明式
function 函数名(){
  // 函数体
}
  • 函数表达式
var fn = function() {
  // 函数体
}
  • 特点:

    函数声明的时候,函数体并不会执行,只要当函数被调用的时候才会执行。
    函数一般都用来干一件事情,需用使用动词+名词,表示做一件事情 tellStory sayHello

函数的调用

  • 调用函数的语法:
函数名();
  • 特点:

    函数体只有在调用的时候才会执行,调用需要()进行调用。
    可以调用多次(重复使用)

代码示例:

// 声明函数
function sayHi() {
  console.log("吃了没?");
}
// 调用函数
sayHi();

// 求1-100之间所有数的和
function getSum() {
  var sum = 0;
  for (var  i = 0; i < 100; i++) {
    sum += i;
  }
  console.log(sum);
}
// 调用
getSum();

函数的参数

  • 为什么要有参数
// 虽然上面代码可以重复调用,但是只能计算1-100之间的值
function getSum(m,n) {
  var sum = 0;
  for (var i = m; i <= n; i++) {
    sum += i;
  }
  console.log(sum);
}

getSum(1,100);
getSum(1,1000);
getSum(20,200)

// 如果想要计算n-m之间所有数的和,应该怎么办呢?(根据业务的需求,n和m均会发生变化)
  • 语法:
// 带参数的函数声明
function 函数名(形参1, 形参2, 形参...){
  // 函数体
}
// 带参数的函数调用
函数名(实参1, 实参2, 实参3);

//函数内部是一个封闭的环境,可以通过参数的方式,把外部的值传递给函数内部.
//函数调用的过程就是把实参传递给形参
  • 形参和实参

    1. 形式参数:在声明一个函数的时候,为了函数的功能更加灵活,有些值是固定不了的,对于这些固定不了的值。我们可以给函数设置参数。这个参数没有具体的值,仅仅起到一个占位置的作用,我们通常称之为形式参数,也叫形参。
    2. 实际参数:如果函数在声明时,设置了形参,那么在函数调用的时候就需要传入对应的参数,我们把传入的参数叫做实际参数,也叫实参。
var x = 5, y = 6;
fn(x,y);
function fn(a, b) {
  console.log(a + b);
}
//x,y实参,有具体的值。函数执行的时候会把x,y复制一份给函数内部的a和b,函数内部的值是复制的新值,无法修改外部的x,y

案例

  • 求1-n之间所有数的和
  • 求n-m之间所有数值和
  • 求2个数中的最大值
  • 求3个数中的最大值
  • 写一个n行的直角三角形
  • 写一个n行的乘法表
  • 求1-n之间所有的偶数的个数

函数的返回值

当函数执行完的时候,并不是所有时候都要把结果打印。

我们期望函数给我一些反馈(比如计算的结果返回进行后续的运算),这个时候可以让函数返回一些东西。也就是返回值。

函数通过return返回一个返回值

返回值语法:

//声明一个带返回值的函数
function 函数名(形参1, 形参2, 形参...){
  //函数体
  return 返回值;
}

//可以通过变量来接收这个返回值
var 变量 = 函数名(实参1, 实参2, 实参3);

函数的调用结果就是返回值,因此我们可以直接对函数调用结果进行操作。

函数的定义:

function f1(x,y) {

​ return x+y;

}

//有参数,无返回值的函数

function f2(x) {

​ console.log(x);

}

//无参数,有返回值的函数

function f3() {

​ return 100;

}

//无参数无返回值的函数

function f4() {

​ console.log(“萨瓦迪卡”);

}

案例

  • 求阶乘
  • 求1!+2!+3!+…+n!
  • 求一组数中的最大值
  • 求一组数中的最小值

arguments的使用

JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。也就是说所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有的实参。arguments是一个伪数组,因此及可以进行遍历

  • 案例
求任意个数的最大值
求任意个数的和

案例

输入一个年份,判断是否是闰年[闰年:能被4整数并且不能被100整数,或者能被400整数]
输入某年某月某日,判断这一天是这一年的第几天?

作用域

作用域:变量可以起作用的范围

全局变量和局部变量

  • 全局变量

    在任何地方都可以访问到的变量就是全局变量,对应全局作用域

  • 局部变量

    只在固定的代码片段内可访问到的变量,最常见的例如函数内部。对应局部作用域(函数作用域)

不使用var声明的变量是全局变量,不推荐使用。
变量退出作用域之后会销毁,全局变量关闭网页或浏览器才会销毁

总结 :

作用域:指的就是一段代码的作用范围。

全局变量 在页面中任何地方都能够访问得到的变量,拥有全局的作用域。

局部变量 只能在固定的代码片段(函数片段中)中访问到。

预解析

JavaScript代码的执行是由浏览器中的JavaScript解析器来执行的。JavaScript解析器执行JavaScript代码的时候,分为两个过程:预解析过程和代码执行过程

预解析过程:

  1. 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
  2. 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
  3. 先提升var

JavaScript的执行过程

var a = 25;
function abc (){
  var a;
  alert(a);
  a = 10;
}
abc();

变量提升

  • 变量提升

    定义变量的时候,变量的声明(var )会被提升到当前作用域的最上面,变量的赋值不会提升。

相关标签: 学习 javascript