1.5 函数

1.5.1 函数定义的两种方式

1. 函数表达式

function关键词前面有东西,就是函数表达式

1.1 有名函数表达式

1.2 虐名函数表达式

有名:var a = function 函数名(){函数体}    函数名唯一,区分大小写

匿名:var a = function(){函数体,用于实现函数功能的语句}   常用

 

2. 函数声明

function前面没有任何东西,就是函数声明

function name(){函数体}

 

3.函数的参数

*形式参数 ==>形参

*实际参数 ==>实参

*函数的形参和实参个数可以不相等,形参可以有无数个,实参也可以有无数个,形参和实参是一一对应的;(实参的数量>形参的数量,不会报错的多出来的值会被arguments接收储存;实参的数量<形参的数量,没有接受到实参的形参值是undefined,实参列表==>arguments是一个类数组,用来储存所有的实参

可以使用console.log(argument)来查看储存的实参的值

*函数的形参和arguments是相互映射的

function mm(a,b,c){
console.log(arguments[3])  //查看第
}
mm(2,3,4,5)   ------>控制台显示出为5

 

1.5.2 argument

使用arguments求出实参(实参的个数不确定)的和, arguments.length 存放的是 实参的个数

function qq(a,b,c,d){
aa=arguments.length;
document.write(aa)
}
qq(1,5,6,8,8,5,5,5,5)

 

1.5.3实参和argument的映射关系

1.通过形参修改了实参的值,必须形参和实参建立了映射关系时(就是实参和形参一一对应),则实参的修改会映射到arguments上,反之 不会映射到argument上,通过arguments修改是实参的值,则实参的修改会映射到形参上。

通过形参(就是单独定义a=一个值)修改了实参的值,还是通过arguments修改实参的值(图三),都会相互映射,最后的值都会改变

打印出的值是20,不是2

2.如果形参和实参没有建立映射关系时(一对一),是不可能修改形参来映射到arguments上的。

function gg(a,b,c){
c='lalala'
document.write(arguments[2]);   ----->undefined 找不到,无法映射
}
gg(2,3)

1.5.4函数的使用

1.实参和形参有多个

function 自定义函数名(形参1,形参2,···){

函数体

}

函数名(实参1,实参2,···);

 

2.使用函数的返回值

作用:1.js数据抛出,让这个js数据可以在函数的外部使用

   2.结束函数 不执行函数内部的代码

默认情况下,程序在函数的最后一句隐式添加return undefined

return undefined有两个作用

1.表示函数执行结束了

2.函数在结束时抛出一个值(抛到花括号之外),值是undefined

★一个函数内只有一个return,if语句除外

例:

function fn(){
console.log(1);
return 22;
}

 fn();  // 调用  --> 打印出22;

或者  var a = fn, console.log(a) --> 22

函数执行完之后,fn()整体就是return算出的结果,然后赋值给变量a,a=22

例:

function pp(a,b){
return a+b;       //---> 函数执行完之后,return把值抛出,
           //此时pp(2,3)整体就是算出的结果,然后赋值给c,c再打印出来
},
var c=pp(2,3)     
console.log(c)    

例子2:

求出实参的和

var sum = 0;      //储存实参的和
function auto(a,b,c,d,e){
for(i=0;i<arguments.length;i++){
sum = sum + arguments[i];
/* 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(sum);  return sum;
}
auto(1,2,32,3,10)     // ---> var a = auto(1,2,32,3,10)
console.log(a)         //----> 打印出值
//换种写法: console.log(auto(1,2,32,3,10))

若此时我不想在控制台打印出来,当函数整个运行完了之后我return出去,则sum的值就是auto()中的值,此时可以定义一个变量来接收。

★一个函数内只有一个return,if语句除外,if条件分支语句不干扰

例:

function ora(){                    
  If(a>3){                              
  console.log(1)
  return 1;
  console.log(2) 
}else{
  console.log(3) 
  return 2;
  console.log(4)}
}   

console.log(fn(10))

显示结果

3.取位数

输入一个数,取出其百位、十位、个位,/ 除运算,%模运算 也就是取余数

取出百位:parseInt(num/100)

取出十位:parseInt((num%100)/10)

取出个位:parseInt(num%10)

 

1.5.4 递归      递归是一个函数频繁的调用自身

1.  5的阶乘 (for循环写)  

var sum =1;
for(var i = 1; i<=5;i++){
  sum*=i;
}
console.log(sum);

2. 把函数封装:

function sum(a){
var sum =1;
for(var i = 1;i<=a;i++){
sum=sum*i;
} 
console.log(sum);
}
sum(10); //可以任意数字

3.

// 5! --->5 * 4! 

// 4! --->4 * 3!     

// 3! --->3 * 2!    

 // 2! --->2 * 1!

//当阶乘为1时,返回1

function sum(num){
    if(num==1){
    return 1;
}
return num*sum(num - 1);
}
    console.log(sum(5))
// sum(5)

// sum(5) == 5 *sum(4) // sum(4) == 5 *sum(3) // sum(3) == 5 *sum(2) // sum(2) == 5 *sum(1) // 必须等到sum(1)知道时才可以算,后面算的先得到结果,从后面开始

 

posted @ 2019-06-11 16:08  小小oRa  阅读(150)  评论(0编辑  收藏  举报