js bind 传参、_[JS基础] 7 - this, call/apply/bind/箭头函数

6e6e6f865b57a65bef1a2b58832fe602.png

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)
- 函数引用
- 执行其他代码

53976805de013ef2f9363504af42bac3.png

this: 是在函数 上下文被创建的时候 就存在了。

2- this

独立函数的调用: this指向该函数内部, 但非严格模式下, 独立的都是用的全局对象。

调用函数 是对象里的函数: this指向该对象。

function 

341bb499851f63a735e8bae9187f681b.png

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 

指向丢失解决

  1. 箭头函数绑定
  2. 使用变量将this保存
  3. 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)

cff40cef29ef08d633f1c171c8d6c314.png
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值