JS函数

  • A+
所属分类:Web前端
摘要

语法:  function  函数名(){    语句块}语法:  function  函数名(参数列表){


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); }

运行结果

JS函数

JS函数

 

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);
}