函数-01

函数的定义方式

给变量x赋值一个function函数

var x = function (){};

如何检测变量x是一个函数

var x = function (){};
    console.log(typeof x);

在这里插入图片描述
看这就是一个函数(其实这种方法在js中定义了一个变量)把函数定义给变量x

js定义函数的方式

  1. 函数表达式
  2. 函数声明 (必须写上函数名字)

函数表达式(把一个函数赋值给了一个变量)

  • function关键词前面有东西 就是函数表达式
  • 1 具名函数表达式
  • 2 匿名函数表达式 (常用的)
var x = function (){};//函数表达式

具名函数表达式

var x = function auto//函数名字 (){//具名函数表达式
    console.log('heaven');
};

匿名函数表达式

var x = function //匿名函数表达式 (常用的)(){
    console.log('heaven');
};

函数声明 :(必须写上函数名字)

function关键词前面没有任何东西 就是函数声明

 function auto(){  //函数声明
        console.log('heaven')
    }

在js里没有匿名的函数声明如:

  function (){//js中不允许这种方式声明函数(语法错误)
         console.log('heaven')
    }

function关键词前面没有任何东西就是函数声明,后面就相当于var变量名字一样

函数的参数

这是一个函数声明

 function auto(){  
        console.log('heaven')
    }

function关键字后面的auto函数当前的名字

如何启用函数的名字

 function auto(){  //函数声明
        console.log('heaven');
    }
    auto();//启用函数当前名字

在JS中:只有函数名字加上()才能执行

形参和实参

在这里插入图片描述

  function auto(a){//a(它是没有任何意义的)只是接收传递过来的实际参数的
  //a是函数的形式参数 -->形参
       console.log(a);
  }
  auto(2);//2是函数执行时 传递的实际参数 -->实参

多个形参和多个实参

形参和实参一一对应的情况

function auto(a,b){  
        console.log(a);
        console.log(b)
    }
    auto(2,"height");

在这里插入图片描述
他是可以传递多个参数(形参和实参)执行的

  • 形参可以有无数个
  • 实参也可以有无数个
  • 形参和实参是一一对应的

形参和实参不是一一对应的情况

实参的数量>形参的数量是不会报错的

  function auto(a,b){  
        console.log(a);
        console.log(b)
    }
    auto(2,"height",[1,2,3]);

在这里插入图片描述
现在的[1,2,3]的实参没有形参接收(其实这个[1,2,3]是被别的东西接收住了)

***到底被谁接住了了呢???***是arguments

 function auto(a,b,c){

            console.log(a);
            console.log(b);
            console.log(c);
            console.log(arguments);
        }
        auto(2,"height",null,[1,2]);

arguments是函数内部的关键词
在这里插入图片描述
这种东西叫类数组合(现在可以理解为是一个数组)
在这里插入图片描述
arguments储存所有实参全集(实参列表/不定参)

实参的数量<形参的数量没有接受到实参的形参值是undefined

 function auto(a,b,c){  
        console.log(a);
        console.log(b)
        console.log(c)
    }
    auto(2,"height");

在这里插入图片描述
其实上面function(){}函数中花括号中隐式的代码入下
在这里插入图片描述
上面的auto(a,b,a)由隐式的三行代码(如上图第二个黄圈)他会偷偷的给你加上的
在函数的花括号内部会隐式的声明形参(形参是变量)

arguments 函数中的关键词它是存储了所有实参

能不能求去所有实参的和呢

使用arguments求出实参(实参的个数不确定)的和

 function auto (a,b,c){
            console.log(arguments);
        }
  auto(1,2,32,3,10);

arguments.length 存放的是 实参的个数,它是表明当前数组有几项的

     function auto(a,b,c){
         var sum = 0;//储存实参的和
         for(var i=0;i<arguments.length;i++){
             sum += arguments[i];
         }
         console.log(sum);
     }
     auto(1,2,32,3,10,20);
 sum = 0+arguments[0] = 1  i++  i=1
 sum = 1+arguments[1] = 3  i++ i=2
 sum = 3+arguments[2] = 35  i++ i=3
 ...

获取形参的个数

console.log(auto.length);//获取形参的个数

实参和arguments的映射关系

     function auto(a,b){
           a = 20;
           console.log(arguments[0])
       }
       auto(2,3);

通过形参修改了实参的值 必须形参和实参建立了映射关系时

  • 则实参的修改会映射到arguments
  • 反之 不会映射到argument
   function auto(a,b){
        arguments[0] = "heaven";
        console.log(a);
    }
    auto(2,3);

通过arguments修改是实参的值

  • 则实参的修改会映射到形参上

形参和实参没有建立映射关系的时候能否通过形参的改动映射到失态列表当中

 function auto(a,b,c){
        c = "lalala";
        console.log(arguments[2]);
    }
    auto(2,3);

在这里插入图片描述

在建立映射关系上的时候没有索引2的,也就是说形参没有跟实参建立起对应的映射关系的时候是不可能通过修改形参来映射到argument上的

函数的return

计算a,b俩数在auto外面的和

   function auto(a,b){
        return a+b;
    }
    var result = auto(2,3);
    console.log(result);//接收抛出来的值

在这里插入图片描述
return也可以结束函数内部的代码

function auto(a,b){
			return a+b;
			var a = 10;
			console.log(a)
			console.log(auto)
		}
		var result = auto(2,3);
		console.log(result)

在这里插入图片描述
return 是函数里面的关键词 作用:

  1. 把JS的数据抛出,让这个JS数据可以在函数的外部使用
  2. 结束函数 不执行函数内部的代码了

函数在不写return的情况下 ,默认returnundefined(也可以把自己给抛出去)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值