导图社区 不知道js思维导图
这是一篇有关不知道的js的思维导图,从语法、行为委托、原型、对象、全面解析等方面进行了分析和概述,需要可收藏。
社区模板帮助中心,点此进入>>
论语孔子简单思维导图
《傅雷家书》思维导图
《童年》读书笔记
《茶馆》思维导图
《朝花夕拾》篇目思维导图
《昆虫记》思维导图
《安徒生童话》思维导图
《鲁滨逊漂流记》读书笔记
《这样读书就够了》读书笔记
妈妈必读:一张0-1岁孩子认知发展的精确时间表
《你不知道的js第一册》
1.作用域是啥
2.词法作用域
3.函数作用域和块作用域
4.提升
概念:不管是变量赋值还是函数定义,所有的声明都会提升到各自作用域最顶部,在任何代码被执行前首先被处理
两个阶段
A.变量、函数声明的编译阶段【阶段】——会提升
B.变量赋值、函数执行的执行阶段。——不会提升
举例:
var a=2;的两个阶段:先有声明,后有赋值
1.var a定义声明在编译阶段进行
2.赋值会被留在原地等待执行阶段
注意
1.提升都只在各自所在作用域进行提升
2.函数声明提升优先于变量提升
3.函数声明提升
函数声明可以提升,但是函数表达式不会提升:同时具名的函数表达式的标识符在也赋值之前不能使用
同名的函数声明,后面的覆盖前面的
函数声明的提升,不受逻辑判断如if的限制,就算不进入循环照样提升
5.作用域闭包
概念:(基于词法作用域):函数可以记住并访问所在的词法作用域时,即使函数是在当前词法作用域之外执行。如此就产生了闭包。
流程:当某个函数可以记住并访问所在的词法作用域,那么就可以在其他地方使用这个闭包:并且这个被记住的词法作用域不会被销毁,可以一直被引用
常见场景:定时器、事件监听器、ajax请求、跨窗口通信等异步or同步任务中,只要存在回调就有闭包
IIFE是闭包,但是不恰当。 因为函数并不是在它本身的词法作用域以外执行的。
循环和闭包
产生错误的原因:块代码+没闭包,导致引用了公共部分的内容
解决方法:通过作用域+闭包,可以解决循环中存在的问题。这里作用域可以通过函数实现or块作用域实现
函数作用域
IIFE实现,但是仅包一层fun是不够的,参数要带入
块作用域
for(let ...){}
模块
实现方法:通常使用模块暴露,返回作为公共API的对象或者函数(jQuery)
一个具有函数属性的对象本身-不是真正的模块
一个从函数调用返回的,只有数据属性而没有闭包函数的对象-也不是真正的模块
必要条件
1.外部包裹函数+函数至少被调用一次返回实例(IIFE)
2.至少返回一个内部函数,才能形成闭包,并可以访问并修改私有状态
es6模块机制
import:将模块中一个or多个API导入当前作用域
module:将模块中全部API导入当前作用域
export:将模块的一个标识符导出为公共API
区别于封闭函数,他是静态的。
6.关于this
7.this全面解析
8.对象
9.混合对象“类”
10.原型
11.行为委托
class语法