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--高级的主要内容,如果未能解决你的问题,请参考以下文章

JS高级程序设置笔记

js实现类似于百度学术的高级检索功能

JS高级技巧学习小结

js-高级技术

JS高级运算符

JS高级程序设置笔记