-
声明提升
-
JS代码在运行时, 会隐式做一些事情
- 先预读一次所有的JS代码, 把声明 都提升到作用域的顶部
- 然后再执行 没有提升的剩余代码部分
-
考点:
-
let/const/var: 只提升声明, 默认值是undefined, 不提升赋值
let a = 6 let a 提升这里 a = 6 赋值不提升,会留下来
- let/const: 提升但是处于
暂存死区
, 赋值前不能用
- let/const: 提升但是处于
-
function: 函数提升 整个函数,包含函数体
-
-
-
函数
- 隐式的变量:
arguments
, 保存了函数接收的所有参数- 不固定参数数量的函数
函数重载
: 根据参数个数/类型不同 做不同的事
- this指向
- 直接调用函数: this指向
运行时
所在的对象 - 严格模式下: 全局调用的函数, this指向
undefined
new
运算符: this是个空对象,let this={}
- 箭头函数的this: 有特殊机制,今天讲.
- 直接调用函数: this指向
- 闭包:
- 函数声明之后, 为了保证在后续使用中都可以正常使用, 会保存声明时所在的
词法环境
- 具体解释: 函数声明时, 查看函数体中使用了哪些变量, 要根据
作用域链
的就近原则, 找到这些变量所在的作用域, 统统保存在自身的scopes
变量中. 以后函数触发时,就从自身的scopes变量中读取值 - 如果变量是属于函数作用域的, 在存储到scopes中时, 称为
闭包:closure
- 函数声明之后, 为了保证在后续使用中都可以正常使用, 会保存声明时所在的
- 隐式的变量:
-
对象:
-
引用类型:
var a = 对象类型
, 实际上 变量a中存储的是对象的地址 -
构造函数: 快速创建指定结构的对象类型
-
写法: 搭配
new
运算符使用function Demo(a, b){ // let this = {} // this.__proto__ = Demo.prototype this.a = a this.b = b // return this } new:会隐式做3件事 let d = new Demo(11, 22)
-
原型: prototype
- 把构造函数中要声明的函数, 存储到 函数的prototype对象类型中, 主要是后期可以复用
-
对象的
__proto__
:- JS引擎的原型链机制: 对象自身没有的属性, 到其
__proto__
变量中查找
- JS引擎的原型链机制: 对象自身没有的属性, 到其
-
-
精确配置对象属性
- defineProperty(对象, 属性名, {配置项})
- 配置项: 可读, 可配置, 可遍历, 默认值, get计算属性, set赋值监听
-
数组高阶函数
- 后期网页中的数据都应该来源于服务器接口, 服务器通过查询数据库得到的通常是 数组类型
- 所以: 操作数组 是未来的一个核心操作
- every: 每一个都符合
- some: 至少有一个符合
- map: 映射
- filter: 过滤
- forEach: 简单的遍历, 代替 for循环
- reduce: 归纳 合并 数组的元素 成为 1个值
-
箭头函数:
- 简化匿名函数:
()=>{}
- 语法糖1: 只有一个参数, ()可以不写:
name => {}
- 语法糖2: 方法体只有一行, 可以省略:
{return }
()=> 12
|()=> { return 12 }
- 简化匿名函数:
JSCORE04
最新推荐文章于 2024-06-20 20:20:21 发布