JavaScript知识体系
2024-06-07 21:06:24 0 举报
AI智能生成
JavaScript知识体系
作者其他创作
大纲/内容
运算规则
两数加减
先将两数转为原生类型,然后查看类型是否存在valueOf方法,存在则调用其作为返回值,否则查看是否存在toString方法,存在则调用,否则抛出异常
ECMAScript
版本
ES 6
函数扩展
箭头函数 =>
函数体内的this对象是定义时所在的对象,而不是使用时所在的对象
不可当做构造函数,即不可以使用new命令,否则报错
不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
不可以使用yield命令,因此箭头函数不能用作 Generator 函数
无法使用apply, class, bind
参数默认值
rest参数
函数内部严格模式
name属性
:: 双冒号运算符
尾调用优化
尾调用
尾递归
递归函数的改写
斐波那契数 Fibonacci
一般实现,复杂度为O(N*lgN)
优化后的实现
阶乘
简单累加,每次加一
一般实现
优化后
函数参数尾逗号
let与const
let
仅在代码块内有效
不存在变量提升的行为
暂时性死区
特例
不允许在相同作用域内重复声明
类
模块
Promise
模板字符串
解构赋值
ES 7
Array.prototype.includes
指数操作符 **
ES 8
async/await
Object.values()
Object.entries()
String padding
Object.getOwnPropertyDescriptors()
函数参数列表结尾允许逗号
ES 9
异步迭代
Rest/Spread 属性
正则表达式命名捕获组
正则表达式反向断言
ES 10
规范提交流程
stage0: 想法提交阶段
stage1:提案阶段
stage2:草案阶段
stage3:候选阶段
stage4:完成阶段
Event loop(事件循环)
同步任务
异步任务
微观任务
Promise
process.nextTick
MutationObserver
宏观任务
setTimeout
setInterval
setImmediate
UI rendering
I/O
this
绑定规则
默认绑定
隐式绑定
显式绑定
new绑定
模块化规范
CommonJS
缺陷
没有模块系统
标准库较少
没有标准接口
缺乏包管理系统
AMD(依赖前置)
CMD(依赖就近)
声明提升
编译器执行流程
1. 编译阶段,定义声明
2. 执行阶段,保留原地
函数及变量声明都会被提升
函数表达式不会被提升
使用let定义的变量不会被提升
函数声明优先被提升
被条件判断所控制的函数声明
改变环境上下文
apply/call
apply
call
bind
对象
六种主要类型
string
number
boolean
null
undefined
object
属性描述符
writable
enumerable
configurable
value
遍历
some
every
forEach
for ... in
for ... of
对象拷贝
深拷贝
JSON.parse(JSON.stringify())
递归复制所有层级属性
$.extend
浅拷贝
Object.assign()仅对最外一层做了深拷贝,里面的对象仍然是浅拷贝
var
其创建的全局变量无法删除(delete)
无var创建的隐式全局变量可删除(delete)
花括号的位置
分号插入机制(semicolon insertion mechanism)
原型链
原型 prototype
作用域
异常
ReferenceError
TypeError
函数作用域
匿名与具名
立即执行函数 IIFE
解决 undefined 标识符的默认值被错误覆盖导致的异常
倒置代码的运行顺序
块作用域
垃圾收集
函数
函数参数
所有函数的参数都是按值传递的
命名函数表达式
声明
表达式
隐式转换
当我们没有重新定义toString与valueOf时,函数的隐式转换会调用默认的toString方法,它会将函数的定义内容作为字符串返回。而当我们主动定义了toString/vauleOf方法时,那么隐式转换的返回结果则由我们自己控制了。其中valueOf的优先级会toString高一点。
函数式编程
柯里化
多参数的函数转换成单参数的形式
变量
NaN
变量声明被提前(作用域范围内)
null 与 undefined
闭包
用处
读取函数内部变量
让这些变量始终保持在内存中
注意
由于闭包会使得函数中的变量都被保存在内存中,内存消耗很大,所以不能滥用闭包,否则会造成网页的性能问题,在IE中可能导致内存泄露。解决方法是,在退出函数之前,将不使用的局部变量全部删除。
闭包会在父函数外部,改变父函数内部变量的值。所以,如果你把父函数当作对象(object)使用,把闭包当作它的公用方法(Public Method),把内部变量当作它的私有属性(private value),这时一定要小心,不要随便改变父函数内部变量的值。
书籍
你不知道的Javascript(上中下)
JavaScript高级程序设计
0 条评论
下一页