LIN.JY666:[JS基础] 1 - 内存空间
LIN.JY666:[JS基础] 2 - 执行上下文 Execution Context
LIN.JY666:[JS基础] 3 - 变量对象 Variable Object
LIN.JY666:[JS基础] 4 - 作用域与作用域链 scope / scope chain
LIN.JY666:[JS基础] 5 - 闭包 Closure
LIN.JY666:[JS基础] 6 - 执行机制, 同步异步, 事件循环, 宏任务, 微任务
1. 在执行上下文 EC 的创建阶段this已经被创建出来了
2. 独立函数运行,this指向函数内部, 但因为非严格模式下,this 会指向window
对象调用的函数,this指向对象
3. this绑定
- call, apply
- bind
- 利用闭包和apply你自己实现个 bind方法
- 手动绑定 例如const that = this
1- 理解 Execution Context 创建和执行阶段
请参考:
LIN.JY666:[JS基础] 2 - 执行上下文 Execution Context
LIN.JY666:[JS基础] 3 - 变量对象 Variable Object
EC 分为 创建阶段 和 执行阶段
创建阶段:
- 生成VO (自己代码里面声明)
- 建立作用域链 (周遭环境声明)
- 确定this指向
调用(执行)阶段:
- 变量赋值(VO => AO)
- 函数引用
- 执行其他代码
this: 是在函数 上下文被创建的时候 就存在了。
2- this
独立函数的调用: this指向该函数内部, 但非严格模式下, 独立的都是用的全局对象。
调用函数 是对象里的函数: this指向该对象。
function
3- this
this 是跟谁调用它有关系
例子1
var
例子2
var
例子3
var
4 - call, apply 手动绑定this指向
- call(x, a, b, c, ....) 接受N个参数, 即原函数的参数
- apply(x, [a, b, c, ....]) 只接受两个参数, 第二个参数必须是数组
function
- fn.call(obj,1,2,3) fn函数调用obj的this, fn里用的是obj的this
- fn.apply(obj,[1,2,3]) fn函数应用obj的this, fn里用的是obj的this
call 和 apply一样的作用, 只是传参接受值不一样
<
5- this指向丢失? 如何补救?
const
指向丢失例子
const
指向丢失解决
- 箭头函数绑定
- 使用变量将this保存
- bind绑定处理
// 箭头函数绑定
5 - bind 是先绑定, 调用再执行, 但call/apply 是立刻执行
const
bind 自行实现: 利用闭包和apply实现
// fn待执行的函数, obj当前this指向对象
_bind
6 - Arrow Function 箭头函数this?
const obj = {
get: () => {
return ()
}
}
es6中的箭头函数是否可以使用new实例化?
- 箭头函数是没有prototype,没有自己this指向,没有arguments,自然也不能new。
function a ()
console.dir(a)
const b = () => {}
console.dir(b)