菜鸟文章:函数

48 阅读2分钟

函数对任何语言来说都是核心组件,因为他们可以封装语句,然后在任何地方,任何时间执行.

ECMAscript中的函数使用function关键字声明,后跟一组参数,然后是函数体.

以下是函数的基本语法:

function functionName(arg0,arg1,....,argN){

statements

}

demo:

基础案列:
​
function sayHi(name){
    console.log(name+"早上好!");
}

js中的函数可以通过 return 来返回值

function sum(num1,num2){
    return num1+num2;
}
​
let result = sum(10,20);
console.log(result);  //30
​
​
//注意事项 function sum(num1,num2){
    return num1+num2;
    console.log("hello world");   //不会执行,   return 后面的语句不会执行 
}
​
​
//一个函数中允许存在多个return 
function maxVlaue(num1,num2){
    if(num1>num2){
        return num1;
    }else{
        return num2;
    }
}

案例1:

//利用函数求区间和

function sum(start,end){
    let sums = 0;
   
    for(let i = start;i<=end;i++){
        sums += i;
    }
​
    return sums;
​
}
​
​
let result = sum(1,100);
​
console.log(result);
​
let result1 = sum(50,100);
​
​
console.log(result1);

案例2:

//设计一个函数判断奇数还是偶数

  //奇数还是偶数
​
   function isEven(num){
       //判断类型
​
       if(typeof num !== 'number'){
           alert("参数不正确");
           return;
       }
​
       //判断奇偶
       if(num % 2 == 0){
           console2.log("他是个偶数");
       }else{
           console.log("他是个奇数");
       }
   }
​
   isEven(20);

案例3:

//封装冒泡排序

    function bubbling(arr){
                for(let i = 0;i<arr.length-1;i++){
                    for(let j = 0;j<arr.length-i-1;j++){
                        if(arr[j]>arr[j+1]){
                            let temp = arr[j];
                            arr[j] = arr[j+1];
                            arr[j+1] = temp;
                        }
                    }
                }
​
                return arr;
    }
​
  let newArr = bubbling([5,4,3,2,1]);
​
  console.log(newArr);

函数参数详解:

 function sum(num1,num2){       // num1,num2  叫做形参  
     console.log(num1+num2); 
  
 }
​
​
 sum(10,20);   //10,20  叫做实参sum(10);  //NaN    没传的参数 是undeined
​
 console.log(result);
​
​
解决办法:
function sum(num1=0,num2=0){     //传一个默认值
    console.log(num1+num2);
}
​
sum(10,20);
sum(10);
​

藏在函数里的 "argument"

function fn(num1,num2,num3){
     console.log(arguments);    //伪数组, 保存着函数的实参
​
     console.log(arguments.length);  //长度
​
     console.log(arguments[1]);   //取到第二个参数
​
​
     for(let i = 0;i<arguments.length;i++){
         console.log(arguments[i]);
     }
 }
​
 fn(10,20,30);

函数的创建方式

//函数声明
  function fn(){
      console.log("这是一个声明式函数");
  }
​
//函数表达式
  let sum = function(num1,num2){
      return num1+num2;
  }
​
let result = sum(10,20);
​
//构造函数法  (暂时了解,学到构造函数会细讲)
  let sum2  = new Function('num1','num2','return num1+num2');
​
  console.log(sum2)
​
​
 /*  两者的区别:解析器会先读取函数声明,并使其在执行任何代码之前可以访问;
     而函数表达式则必须等到解析器执行到它所在的代码行才会真正被解释执行。 
  */
​
​
​
//拓展知识点 (函数自调用)
​
(function(num1,num2){
    console.log(num1+num2)
})(1,3);
​
​
​