函数在js中扮演了几个角色?(函数到底扮演什么角色取决于函数的调用方式)
1. 构造函数(构造函数主要用来实例化对象)
2. 普通函数(一般普通函数都是用来实现一个特定的功能)
3. 作为对象(函数可以作为一个普通对象使用)
javascript
function foo(){
}
new foo();//构造函数
foo();//普通函数
foo.abc = 123;//作为对象
函数的产生的方式:
1、内置函数(内置对象、库函数)
Object、Array、Date、RegExp、String、Number、Boolean、Error、Function(*Math不是函数,而是对象)
2自定义函数
1. 函数声明 (可以先调用后声明)
2. 函数表达式 :判断条件时,不符合条件的表达式,不会出现占用内存(必须先声明在调用)
3. new Function() (一般情况下用不到)
函数调用的方式:
1、构造函数实例化
2、普通函数调用
3、对象方法调用
4、call 和 apply
5、函数立即调用(沙箱)
call/apply的用法
1、调用函数
2、改变所调用函数的内部的this指向
3、借用其他对象的方法
4、把类数组转成数组
关于this:
this到底指向谁取决于函数调用的方式
// 普通函数(在非严格模式下,this指的是window;在严格模式下,this的值是undefined)
// 严格模式("use strict"):对语法规则要求更加严格
this出现的场景:
1. 普通函数中的this
2. 构造函数中的this
3. 原型方法中的this
4. 实例对象中的this
5. 定时函数中的this
6. 事件函数中的this
何时需要缓存this?this的指向发生改变
// 对象方法中的this就是方法的调用者
// 事件函数中的this指的是绑定事件的对象