JavaScript中的函数

day4javascript中的函数

函数的定义: 函数就是JavaScript的基础模块单元,包含一组语句,用于代码的复用,信息隐藏 和 组合调用。
简单点说:函数就是把任意的一段代码放在一个盒子里面,在我想要执行这段代码的时候,直接执行这个盒子里面的代码就行了

函数的创建和结构

1.函数的创建

在JavaScript语言中,可以通过一下三种方式创建:

  • 函数声明
 //函数声明式创建函数
 function f1() {
     //需要编写的代码
 }
// function: 声明函数的关键字,表示接下来是一个函数了
// f1: 函数的名字,我们自己定义的(遵循变量名的命名规则和命名规范)
// (): 必须写,是用来放参数的位置(一会我们再聊)
// {}: 就是我们用来放一段代码的位置(也就是我们刚才说的 “盒子”)

  • 字面量方式创建(赋值式)
var f2 = function() {
    //需要编写的代码
}

  • 使用Function构造函数创建(不推荐)
    var f3 = new Function('参数1','参数2',...,'函数要执行的代码')//构造函数的参数中最后一个参数为函数体的内容,其余均为函数的形参

2.函数的调用

函数的调用实际上就是让函数执行(使用函数里面的代码)

函数调用 就是直接 写 函数名() 就可以了

    f1();
    f2();
    f3();

˙注意: 定义一个函数以后,如果函数没有调用,那么写在函数{}里面的代码将没有任何意义。

3.函数的结构

函数的一般表现形式为:

    //函数声明
    function fn(参数[行参]){
        //函数体
    }
    fn(参数[实参])

函数包括一下4个部分:

  • 保留字:function
  • 函数名字:fn
  • 参数:圆括号以及圆括号里面的参数
  • 函数体:花括号以及花括号里面的语句

4.匿名函数

当声明一个函数,没有函数名的时候,那么这个函数就称之为匿名函数

    function() {
        //编写的代码
    }

声明式创建函数 和 赋值式创建函数的区别:
虽然两种定义方式的调用方法都是一样的,但是还是会村子啊一些区别的

  • 声明式函数:调用可以在 定义之前 或者 定义之后调用
    //可以调用
    fn();

    //声明式函数
    function fn(){
        console.log('我是婧婧')
    }

    //也可以调用
    fn()

  • 字面量赋值式函数:调用只能 在定义函数的后面
    //不可以调用(会报错)
    fn();
    
    //赋值式函数
    var fn = function(){
        console.log('我是婧婧')}

    //可以调用
    fn();

函数的参数

  • 我们定义函数 和 调用函数都出现了 圆括号()
  • 思考圆括号()的作用?
  • 圆括号就是我我们用来存放参数的位置
  • 参数又 分为: 行参 和 实参
    //声明函数
    function fn(行参写在这里){

    }
    fn(实参写在这里))

1.行参 和 实参 的作用

  • 行参

    • 就是在函数内部可以使用的变量,在函数外部不可以使用
    • 没定一个行参,就相当于在函数内部定义一个可以使用的变量
    • 参数 与 参数之间 用 逗号 分隔
        function fn(a,b,c){
            //相当于在函数内部定义了a b c 三个变量,我们可以直接在函数内部使用这个三个变量
           consoloe.log( a + b +c)
        }
    
    • 如果只有行参,没有实参的话,那么在函数内部使用这个变量式没有值的,会得到一个undefined
    • 行参 的值 由 函数调用的时候的实参 来决定的
  • 实参

    • 在函数调用的时候给 行参 赋值
    • 也就是在调用函数的时候给一个具体的内容
        function fn(a,b,c){
            // 相当于在函数内部定义了a b c 三个变量,我们可以直接在函数内部使用这个三个变量
           consoloe.log( a + b +c)
        }
        fn(1,2,3)
    
        //这里的行参为: a,b,c
        //这里的实参为: 1,2,3
    
    
    • 当函数由多个参数的时候,行参 和 实参 式一一对应的

2. 参数个数的关系

函数调用时,会完成实际参数 对 形式参数的复制工作。
当实际参数的个数 和 形式参数 的 个数不匹配的时候 会导致运算错误

  • 行参 比 实参 少

    • 因为参数式按照顺序一一对应
    • 行参 比 实参 少的时候,那么行参 就拿不到多余的 实参
        function fn(a,b){
            //函数内部可以使用a 和 b
        }
    
        //调用函数
        fn(1,2,3)
    
        //本次调用传递了 三个 实参: 1 , 2 ,3 
        //1 对应的行参 为a,2对应的行参 为b,那么 3 没有跟它对应的行参,也就是函数内部没有办法已通过变量来使用3这个值
    
    
  • 行参 比 实参 多

    • 因为参数式按照顺序一一对应
    • 所以多出来的行参就是没有值的,就是 undefined
        function fn(num1, num2, num3) {
        // 函数内部可以使用 num1 num2 和 num3
        }
    
        // 本次调用的时候,传递了两个实参,100 和 200
        // 就分别对应了 num1 和 num2
        // 而 num3 没有实参和其对应,那么 num3 的值就是 undefined
        fn(100, 200)
    
  • 函数的参数(arguments)

在函数的内部,我们总是可以获得一个免费配送的arguments参数。
arguments用于接收函数调用时传入的实际参数,它被设计成一个类似数组的结构,拥有length属性,但是它不是一个真正的数组,所以不能使用数组对应的的方法。
arguments参数的存在,使得我们可以便携一些无需指定行参个数的函数


function sum(){
    var sum = 0;
    var count = arguments.length;
    for(var i = 0;i < coung; i++){
        sum += arguments[i];
    }
    console.log(sum);
}

函数的返回值(return)

  • 函数体中 return语句 给函数一个返回值 或者 终止函数的执行。
  • 当return 语句被执行时,函数立即返回而不在执行 剩余的代码。
    //  终止函数的执行
    function fn() {
        console.log(1)
        console.log(2)
        console.log(3)
        
        // 写了 return 以后,后面的 4 和 5 就不会继续执行了
        return
        console.log(4)
        console.log(5)
    }

    // 函数调用
    fn()

  • return语句后面 跟上你要返回的数据(可以式一个表达式,可以式任意的数据类型)
    function fn() {
        // 执行代码
        return 100
    }

    // 此时,fn() 这个表达式执行完毕之后就有结果出现了
    console.log(fn()) // 100
  • 函数总是有一个返回值,如果函数体中没有return语句或者return 后面为空,那么函数将总式返回 undefined
    function fn() {
    // 执行代码
    }

    // fn() 也是一个表达式,这个表达式就没有结果出现
    console.log(fn()) // undefined

函数的优点

函数就是对一段代码的封装,在我们想要使用这段代码的时候调用

【1】封装代码,是代码更加简洁

【2】复用性更强,在实现重复功能的时候,只要直接调用封装好的嗲吗即可

【3】代码执行时机,随时可以在我们想啊哟执行的时候去执行

作用域

  • 作用域决定了这些变量的可访问性(可见性)。
  • 作用域分类:全局作用域 和 局部作用域

(1)全局作用域

  • 函数之外声明的变量 或者 函数内部没有 用var 关键字声明的变量,会成为全局变量
  • 全局变量的作用域是全局的:网页的所有脚本和函数都能够访问它。

(2)局部作用域

  • 在 JavaScript 函数中使用var关键字声明的变量,会成为函数的局部变量
  • 局部变量的作用域是局部的:只能在函数内部访问它们。

(3)JavaScript 变量的有效期

  • JavaScript 变量的有效期始于其被创建时。

  • 局部变量会在函数完成时被删除。

  • 全局变量会在您关闭页面是被删除。

    8.onload事件

    window.onload页面资源加载完毕之后去执行的事件

    案例

    1.求任意两个数的和

    需求 给函数传递n多参数,求这些参之和

    function sum(){
      var he=0;
      for(var i=0;i<arguments.length;i++){
        he+=arguments[i]
      }
      console.log(he);
    }
     sum(1, 4, 5, 6, 77, 88, 12, 34, 45);
    

    2.计算三个数字的大小

    先计算最大值和最小值出来

    中间值:不是最大值并且也不是最小值的时候,就是中间值

    
    var a = 10,
      	b = 5,
      	c = 8;
    function fun (){
      //假设第一个是最大值max
      var max = arguments[0];
      for(var i = 0;i<arguments.length;i++){
        if(arguments[i]>max){
          max=arguments[i]
        }
      }
        // 假设一个最小值 min
                var min = arguments[0];
                for (var j = 0; j < arguments.length; j++) {
                    if (arguments[j] < min) {
                        min = arguments[j]
                    }
                }
      //求中间值
       var center;
        for (var k = 0; k < arguments.length; k++) {
            if (arguments[k] != max && arguments[k] != min) {
                  center = arguments[k];
                    }
                }
                console.log(min, center, max);
    }
    fun(a,b,c);
    

    3.求三个数的最大公约数

    求三个数的最小值,然后用最小值不断递减,直到能被三个数整除的数,那么这个数就是最大公约数

    var a= 12,
        b=24,
        c=48,
       //用min这个变量来接收最小值
        var min = minFun(a,b,c);
        // 用最小值不断递减
            for (var j = min; j >= 1; j--) {
                if (a % j === 0 && b % j === 0 && c % j === 0) {
                    console.log(j);
                    break;
                }
            }
    	//这个函数就是返回一个最小值
    funciton minFun(){
      var min= arguments[0];
      for(var i = 0; i<arguments.length;i++){
        if(arguments[i]<min){
          min=arguments[i]
        }
      }
      return min
    }
        
    

    4.求一个数是不是质数

    只能被1和自身整除的数是质数

    var num =7;

    求2-6之间看看是否有一个数能被7整除

    如果有,那么就说明7不是质数,如果有,说明7是质数

    var flag=0;//表示这个数是质数
    for(var i = 2;i<=num-1;i++){
      //只要满足这个if条件,就说明num不是质数。flag=1
      if(num%i==0){
        flag=1;
      }
    }
    //根据flag判断num是否是质数
    if(flag==0){
      alert("是质数")
    }else{
      alert("不是质数")
    }
    

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值