第六节课

函数[前言]

  • 函数的定义和调用方式
  • this:函数内部的this指向,如何改变this’的指向
  • 函数的严格模式
  • 高阶函数:函数作为参数传递、函数作为返回值
  • 闭包:闭包的作用
  • 递归:递归的两个条件
  • 深拷贝和浅拷贝的区别

函数的介绍

  • 函数:将一些功能或语句进行封装,在需要的时候,通过调用的形式,执行这些语句
  • 函数也是一个对象
  • typeof函数对象
  • 作用

    • 将重复语句抽取出来,封装在函数中,直接调用
    • 简化编程:让编程模块化,高内聚弱耦合
  • 举例
    console.log(‘hello’);
    //定义
    function sayHello(){
    console.log(‘hello’);
    return hello
    }

函数的定义和声明

  • 方式一:命名函数

    • 使用function关键字自定义函数(命名函数)
    • function 函数名([形参1,形参2…形参n]) {
      语句…
      [return 返回值]
      }
    • function sum(a,b) {
      return a+b;
      }
  • 方式二:匿名函数

    • 函数表达式(匿名函数)
    • var 变量名 = function[(形参1,形参2…形参n)] {
      语句…
      [return 返回值]
      }
    • let fun = function() {
      return ‘我是匿名函数中的代码’;
      }
  • 方式三:使用构造函数

    • 构造函数创建函数 new Function()
    • let 变量名/函数名 = new Function(’形参1’,’形参1’,’函数体’);
    • let newFun = new Function(‘a’,’b’,’console.log(“我是函数体中的内容”); let sum = 3+5;console.log(“sum=”+sum);’);
  • 总结

    • 所有的函数,其实都是Function的实例,函数本质上都是new Function()得到的
    • 函数当然是’对象’,proto(原型)
    • console.log(fun1 instanceof Object)

函数的调用

  • 普通函数的调用

第六节课 - 图1

直接调用
第六节课 - 图2

call()

  • 通过对象的方式调用
    第六节课 - 图3

  • 立即执行函数
    第六节课 - 图4
    调用

  • 通过构造函数调用

  • 绑定事件函数
    第六节课 - 图5
    格式

  • 定时器函数

函数的参数

  • 形参:表示接受一个值

    • 概念:形式上的参数。定义函数时传递的参数,当时并不知道是什么值
    • 定义函数时,可以在函数的’()‘中来指定一个或多个形参
    • 多个形参之间使用’,‘隔开,声明形参就相当于在函数内部声明了对应的变量,但是并不赋值
  • 实参:实际传递的值

    • 概念:实际上的参数。调用函数时传递的参数,实参将会传递给函数中对应的形参
    • 可以在函数的’()‘中指定实参
    • 实参的类型:任意数据类型
    • 调用函数的时候,编译器不会检查实参的类型,要注意对参数进行类型检查
    • 实参的数量(和形参个数不匹配)

函数的返回值

  • return:终止函数(结束方法)
  • return的值是函数的执行结果返回,可以用变量接收
  • return后面不跟任何值,默认相当于返回了undefineded
  • 返回值的类型,可以是任意数据类型’
  • return只能返回一个值

注意点

  • 函数名代表什么? = 整个函数

    • console.log(fn) == console.log(function fn(){alert(1)})
  • fn()和fn的区别?(重要)

    • fn():调用函数。调用之后,还获取了函数的返回值
    • fn:函数对象。相当于直接获取了整个函数对象
  • 立即执行函数的使用

  • break、continue、return的区别

  • 函数调用和方法调用
    函数也可以成为对象的属性。如果一个函数是作为一个对象的属性保存,那么,我们称这个函数是这个对象的方法。调用这个函数就说调用对象的方法(method)

    • fn()是函数调用
    • XX.fn()是方法调用