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