JS--高级
Posted smallcap
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS--高级相关的知识,希望对你有一定的参考价值。
1,分号
不加分好有问题的情况
a,小括号开头的前一条语句
b,中方括号开头的前一条语句
2,函数高级
**原型与原型链**
函数的prototype属性:默认指向一个空对象(称为原型对象)
**显式原型和隐式原型**
显式原型属性:每个函数都有prototype
隐式原型属性:每个对象都有__proto__
**原型链**
沿着隐式原型__proto__这条链去查找对象,直到找到,或者到尽头返回undefined
函数的显式原型指向的对象默认是空object实例对象(但是object不满足)
所有函数都是Function的实例(包括Function他自身)
object原型对象是原型链的尽头(因为object的隐式原型对象__proto__的值是null)
注意:查找属性的时候才去看原型链,设置属性时只会给该对象添加属性
**探索 instanof (判断左边的对象是不是右边的实例)**
7月7日
**执行上下文和执行上下文栈**
?? 变量提升与函数提升
通过var定义的变量和function声明的函数,在定义前调用,称为变量和函数的提升,返回值是undefined
?? 执行上下文
全局执行上下文,函数执行上下文
在执行变量,在函数调用前:在栈里面创建对应的执行上下文对象,预处理;最后执行全局代码,函数体代码。
?? 执行上下文栈
在全局代码执行前,会创建一个栈管理执行上下文对象(后进先出)
***作用域与作用域链***
全局作用域
函数作用域
块作用域:{}
***循环遍历加监听***
?? 闭包
?注意点:别多次计算btns.length
??比如:for(var i = 0,length = btns.length;i < length;i++){}
?利用闭包实现循环遍历加监听
?如何产生闭包:【前提外部函数被执行】,当一个嵌套的内部函数引用了潜逃的外部函数的变量(函数)时,就产生了闭包(闭包:包含被引用变量或者函数的对象)
???闭包作用:使用函数内部变量在函数执行后,仍然存活在内存中(演唱了局部变量的生命周期);并且让函数外部可以操作(读写)到函数内部的数据(变量/函数)
???闭包死亡:在嵌套的内部函数称为垃圾对象时
?? 闭包应用--自定义JS模块
JS模块:具有特定功能的js文件(将所有数据和功能都封装在一个函数内部)
暴露的方式: 1,return (缺点:需要调用)
2,绑定为window的属性,则可以在外部直接使用
?? 闭包缺点(内存溢出,内存泄漏)
解决方案:让内部函数称为垃圾对象回收闭包 --> f=null
内存泄漏累计过多就会造成内存溢出
比如:意外的全局变量(a = 3 )
比如:循环定时器不清理
比如:闭包未 f=null
7月9日
***对象创建模式***
??object构造函数模式
??对象字面量
??工厂模式(工厂函数:返回一个对象的函数)
??自定义构造函数模式
??构造函数 + 原型的组合模式
7月11日
***原型链继承***
子类型的原型为附类型的一个实例对象
***组合继承***
***进程与线程***
线程是进程内的一个独立的执行单元,是程序执行的一个完整流程,是CPU的最小调度单元
区分:初始化代码,回调代码
JS是单线程
JS引擎执行代码的基本流程
**先执行初始化代码:包含一些特别的代码 回调函数(异步执行)
**设置定时器
**绑定事件监听
**发送ajax请求
**后面在某个时刻才会执行回调代码
***事件循环模型***
1,JS初始化代码;2,WebAPIs;3,callback queue。
***H5 Web workers 多线程***
将一些大计算量的代码,交由web worker运行而不冻结用户界面
在分线程中,window不再是全局变量,(比如document不可用)
不足:不是所有浏览器都支持,速度慢
以上是关于JS--高级的主要内容,如果未能解决你的问题,请参考以下文章