函数

173 阅读4分钟

1.函数

  • 函数的概念
    • 函数就是把特定功能的代码抽取出来,使之成为程序中的一个独立实体
  • 函数的作用
    • 根据需求,把特定的功能用函数来封装
  • 函数的好处
    • 1.复用性:可以在一个程序或其他程序中多次重复使用(通过函数名调用)
    • 2.高效率:程序剪短清晰,提高可读性
    • 3.利于程序维护

2.函数分类:

  • 系统函数和内置函数:
    • 已经提供好的函数,可以直接使用
    • 注意三点:1.作用 2.参数 3.返回值
  • 自定义函数:
    • 根据需求,对特定函数进行封装

3.函数的定义和调用

  • 函数的简单定义:
函数的简单定义
      定义函数的语法格式: 
       function  函数名() {
            代码块;
       }
注意:  
    1, 必须使用function关键字, 且为小写, 函数名可以自己给定
    2, 函数名的命名规则和变量名一致
    3, 函数名后必须写圆括号()

示例:   定义一个函数printOut
     function printOut(){
          document.write(“Hello World!”);
     }     
  • 函数的调用:
函数的调用方式: 函数名() 
    如 : 调用下面的函数:  printOut(); 
      function printOut(){
            document.write(“Hello World!”);
       }

注意:   
    1, 调用函数后会执行函数内部的代码块;
    2, 函数在不调用的情况下是不会执行的, 只有调用后函数中的代码才会执行
  • 函数的标准定义:
函数的标准定义
    定义函数的语法格式: 
    function 函数名(参数1,参数2,……){
        执行语句;
        return 返回值;
    }
注意:  
    1, 函数名后圆括号()中的参数数量不定, 也可以没有; (根据功能需要)
    2, return关键字的作用是将某个值返回,  如果没有返回值则默认返回undefined;

4.形参和实参

  • 形参:
    • 形参就是在定义函数时,函数名后面的括号的参数
    • 函数的形参跟变量是一样使用,且不能用var修饰
    • 是一种形式参数
  • 实参:
    • 实参就是调用时,函数名称后面的参数

5.函数中的arguments数组

  • arguments数组是只能在函数中使用,在函数外面无法使用
  • 它是一个伪数组,类似数组
    • 可以按照索引存储数据
    • 具有length属性
    • 不具备数组方法
    • 伪数组的原型链中没有数组的原型
  • 主要作用:用来动态接受实参
//没有形参
function calc() {
    var sum=0;
    for(var i=0;i<arguments.length;i++){
        sum+=arguments[i];
    }
    return sum;
}
//实参可以任意数量
console.log(calc(10,2,30));

6.作用域和作用域链

  • 作用域:

    • 函数和变量起作用的范围,或者说有效范围
  • 作用域链:

    • 由当前执行上下文中所有嵌套的作用域对象所组成的链式结构
    • 在这个执行上下文中,JavaScript引擎会首先在当前作用域中查找变量和函数,如果找不到,就会沿着作用域链向上查找,直到找到该变量或函数为止,或者抵达全局执行上下文的作用域。
    • 个人理解:就是在多层嵌套中的函数中该层找不到,就开始往外层找,外层没有,就继续往外层找,直到找到或是到最顶层作用域
  • 作用域和作用域链的区别?

    • 作用域:函数的作用范围,分为:全局作用域和局部作用域
    • 作用域链:访问某个变量的是,优先在当前的函数内部查找,如果内部函数没有就向外部函数查找,如果外部函数没有,就像外出...就开始向全局找,如果全局(window)没有就报错

7.局部变量和全局变量

  • 局部变量:
    • 定义在函数内部的变量,这个变量只能在函数内部使用,即作用域范围只在函数的内部,形参也是局部变量
  • 全局变量:
    • 定义在函数外部的变量,这个变量在任何函数中都有效,作用范围为当前文件的任何地方
    • 在定义变量时,不写关键字var也是合法的,而且是全局变量,但是这样写不安全,容易在其他地方被更改,尽量使用关键字定义全局变量
//在函数内部,使用var关键字,声明的变量是局部变量 a
//在函数内部,没有使用var关键字的,是全局变量    b,c
// b是全局变量,c是全局变量
function fn() {
    var a = b = 100;
    c=100;
}

fn();
// console.log(a);
console.log(b,c);