第六节课
函数[前言]
- 函数的定义和调用方式
- 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)
函数的调用
- 普通函数的调用
直接调用
call()
通过对象的方式调用
立即执行函数
调用通过构造函数调用
绑定事件函数
格式定时器函数
函数的参数
形参:表示接受一个值
- 概念:形式上的参数。定义函数时传递的参数,当时并不知道是什么值
- 定义函数时,可以在函数的’()‘中来指定一个或多个形参
- 多个形参之间使用’,‘隔开,声明形参就相当于在函数内部声明了对应的变量,但是并不赋值
实参:实际传递的值
- 概念:实际上的参数。调用函数时传递的参数,实参将会传递给函数中对应的形参
- 可以在函数的’()‘中指定实参
- 实参的类型:任意数据类型
- 调用函数的时候,编译器不会检查实参的类型,要注意对参数进行类型检查
- 实参的数量(和形参个数不匹配)
函数的返回值
- 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()是方法调用