this
当一个函数被调用时,会创建一个活动记录(执行上下文),该记录会包含一些信息(调用栈、调用方法、传入的参数等),this 就是该记录中的一个属性
- 在全局执行上下文中,this 指向全局对象
- 在函数执行上下文中,this 取决于函数的调用方式,如果该函数被一个引用对象调用,则指向该对象
改变 this 指向
箭头函数的 this
- 箭头函数自身没有 this,它的 this 是继承父执行上下文里面的 this,可以理解为定义时的 this
- 箭头函数没有 prototype
- 无法改变箭头函数的 this
调用栈
js 是单线程语言,所以只有一个调用栈,因此同一时间只能做一件事
- 内存堆:内存分配发生的地方
- 调用栈:代码执行的地方
定义:调用栈是解释器追踪函数执行流的一种机制。当执行环境中调用了多个函数时,通过这种机制,我们能够追踪到哪个函数正在执行,执行的函数体中又调用了哪个函数
function hello() {
var a = 1;
hi();
b = 1;
}
function hi() {
var c = 1;
}
hello();
- hello 函数被调用,将 hello 添加进调用栈表
- 执行 hello 中的所有代码
- 直到执行 hi,将 hi 添加进调用栈
- 执行 hi 的所有代码,直到执行完毕
- 删除调用栈中的 hi
- 继续执行 hello 后面的代码,直到执行完毕
- 删除调用栈中的 hello