每一个函数在运行的时候都会创建一个独有活动对象,在活动对象中包含函数的参数、函数内部声明的数据。除了定义参数与声明的变量与函数外,在这个活动对象上还存在一个叫做上下文的(context) 东西
函数的5种调用模式及this的含义:
1. 函数模式:this 表示全局对象(浏览器中是window,在node 中是 global)
- 构造器(constructor)模式:this 表示刚刚创建出来的对象
- 方法(method)模式:this 表示调用方法的对象
- 上下文(context)模式:this 可以使用参数来动态描述(动态绑定)
- bind 模式:this 与上下文模式类似,也是通过参数来确定(静态绑定)
箭头函数
函数模式:
特点:独立运行,调用语法格式前面没有任何引导数据;
function foo(){console.lot(1)};
foo(); //foo() 前面没有任何引导
构造器模式
语法:new 构造器函数()
function Person(){}
var p = new Person();
// 运行过程:
//1. 先使用new 运算符分配内存空间,在 js 中就是创建对象(一个空的对象,一个具有原型结构的对象)
// - 空对象的原型(__prop__) 是:Person.prototype
//2. 调用构造函数
// - 创建活动对象
// - this 创建的对象的引用会作为 活动对象 中的上下文对象被引用,即:构造器中的this 指向内存地址(一个空对象)
// - 预解析
// - 解释执行
方法调用模式:
一个函数作为对象的一个成员,由方法引导调用,这个调用就是方法调用,表现为 调用前有一个引导数据:满足通过 XXX 访问到方法名 调用;
var o ={
run :function(){
console.log('run');
}
}
o.run();
练习:
function foo(){
console.log('foo');
}
var arr =[];
arr.push(foo);
var fn = arr[0];
fn(); //是什么调用:函数
arr[0](); // 是什么调用:方法