JS函数

1.普通函数

语法:

  function  函数名(){

    语句块

}

2.带参函数

语法:

  function  函数名(参数列表){

    语句块

}

3.带返回值的函数

语法:

  function  函数名(参数列表){

  语句块;

  return 值;

}

  允许通过一个变量来接受调用函数后的返回值

  var 变量名 = 函数名(实参列表)

练习:

定义一个可以接受三个Number参数的方法,在该方法中,计算并返回最大的数值

<script type="text/javascript">
    function getMax(a,b,c){
        var max = a;
        b > max && (max = b);
        c > max && (max = c);
        return max;
    }
</script>
<button type="button" onclick="console.log(getMax(20,45,88))">最大值计算</button>

4.作用域

1.定义:变量和函数的可访问范围,主要有两类

  (1)函数作用域 

    只在定义的函数内允许访问变量和函数

  (2)全局作用域

    一经定义,在任何位置处都能访问

2.函数作用域中的变量

  在某个函数中声明的变量,就是函数作用域中的变量,也可以称为 “局部变量”

3.全局作用域中的变量

  一经声明,任何位置都能使用,也称为 “全局变量”

  声明方式:

  (1)将变量声明在最外层,所有的function之外

  (2)声明变量时不使用 var 关键字,一律是全局变量,但有风险 (当定义在函数中不使用var关键字声明全局变量时,只有此函数运行过一次后才声明成功)

4.声明提前

  JS程序在正式执行前,会将所有var声明的变量以及function声明的函数,预读到所在作用域的顶端,但赋值还保留在原位置

function show(){
  console.log(num);  //打印undefined
  var num = 10;
  console.log(num);
}


function show(){
  console.log(num);  //报错
}

5.值传递

function change(a,b){
    a ^= b;
    b ^= a;
    a ^= b;
}
function testchange(){
    var a = 15;
    var b = 18;
    console.log("调用前:");
    console.log(a,b);
    change(a,b);
    console.log("调用后:");
    console.log(a,b);
}

运行结果

 

change() 函数传过去的相当于副本,所以不会影响testchange() 函数中的内容

 建议:基本数据类型的数据在做参数传递时,尽量不要在函数中修改,因为即使修改了,也不会影响原数据

5. 局部函数

将函数声明在某个函数内

6.全局函数

  1. paseInt()
  2. parseFloat()
  3. Number()
  4. isNaN()
  5. encodeURI()  :对统一资源标识符格式的字符串进行编码,并返回编码后的字符串  将多字节的字符,编译成多个单字节的字符。
  6. decodeURI()  :对已编码的URI进行解码
  7. encodeURIComponent()  在encodeURI基础上,允许特殊符号(:,/,)进行编码
  8. decodeURIComponent()
  9. eval()  计算并执行以字符串方式表示的JS代码

7.递归调用

1.递归指的是在一个函数中,有一次的调用了自己

2.递归的实现

  (1)边界条件

  (2)递归前进 - 继续调自己

  (3)递归返回 - 向上返回数据

3.解决问题

  计算某个数字的阶乘

//求n的阶乘  
function f(n){
//判断是否到达边界条件,如果达到,则返回1
if(n == 1){
return 1;
}else{
return n * f(n-1)
}
}

//通过条件运算符改版
function f(n){
return n== 1 ? 1 : n * f(n-1);
}

 练习:

  已知下列数列 (菲波那切数列)
  1,1,2,3,5,8,13,21,34,55,... ...
  已知 第一个数为1,第二个数为1
  从第三个数开始,每个数字等于前两个数之和

/**
 * 求斐波那契数列中第n个数字的值
 * 边界条件:n == 1 | n == 2
*/
   function f(n){
     if(n == 1 || n ==2){
       return 1;
     }else{
       return f(n-1) + f(n-2)
     }
                
   }
   console.log(f(5));

 

posted @ 2020-09-29 17:02  you_rgb  阅读(282)  评论(0)    收藏  举报
//一下两个链接最好自己保存下来,再上传到自己的博客园的“文件”选项中