day5 函数

函数

为什么要有函数

如果要在多个地方求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 )会被提升到当前作用域的最上面,变量的赋值不会提升。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值