04 Web全栈 闭包/this指针

专业术语

  • 变量、常量、数据类型
  • 形参、实参
  • 匿名函数、具名函数、自执行函数
  • 函数声明、函数表达式
  • 堆、栈
  • 同步、异步、进程、线程

执行上下文

当函数执行时,会创建一个执行上下文的环境,分为创建和执行两个阶段

创建阶段
创建阶段,指函数被调用但还未执行任何代码时,此时创建了一个拥有3个属性的对象

executionContext = {
	scopeChain: {}, // 创建作用域链
	variableObject: {}, // 初始化变量、函数、形参
	this: {} // 指定this
}

代码执行阶段
代码执行阶段主要的工作是1、分配变量、函数的引用、赋值;2、执行代码

函数作用域变量是在定义时栈向外找,不是调用时向外找
let 经过babel编译 直接编译成var, 但是会有很多hack技巧

闭包

高级程序设计中,闭包是指有权访问另一个函数作用域中的变量的函数,可以理解为能够读取其它函数内部变量的函数

function outer () {
	var top = 'yuanxin'
	return function inner () {
		console.log(top)
	}
}
const inner = outer()

this

场景1:函数直接调用 -> 全局或undefined

场景2:函数被别人调用 -> 执行时谁点出来就是谁
注意这个执行时, 所以回调函数是全局

场景3:new 一个实例的时候 -> new出来的实例

场景4:call,apply,bind调用的时候

场景5:箭头函数指向离这个箭头函数最近的非箭头函数上下文

例:

var obj = {
	name: 'zhangsan',
	getName: function () {
		console.log(this.name)
	}
}
// 逗号表达式,返回后一个值
(1, obj.getName)() //这里的this是window 所以console结果是undefined

箭头函数认不认call、apply?

总结一下

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值