复习

###异步编程


js引擎是单线程的(浏览器是多进程 多线程的)
   进程:是操作系统分配资源(cpu的时间片)的最小单位
   线程:是进程内部的最小单元
   线程使用的资源是他所属的进程去抢的

  进程内部可以有多个线程
  这些线程共享资源
  多线程开发:
  A线程创建的变量,B线程可以读到,B线程也可以修改
  锁!!!!

###回调函数:

一般回调函数都是一个匿名函数
我们只想要定义回调函数 不需要调用
最终函数会被js引擎自动调用(带条件)
条件: 时间到了 用户触发了一些行为
同步回调函数
      立马执行 只有等同步回调函数执行完毕 后续代码才可以继续执行
      arr.map(function(item,index,arr){})
异步回调函数
    setTimeout(function(){},time)


   js代码只能由js引擎来执行.
   js引擎是单线程的 一个时间点只能执行一个任务(解析js代码);js引擎遇到异步代码(异步回调函数)选择通知浏览器开启异步线程
   让异步线程持有这个回调 在一定条件达成的情况下 异步线程将异步回调函数 塞到异步队列中 等待js引擎来轮询
   只要js引擎空闲下来就会去不断的轮询异步队列!!

###生命周期

   作用域的生命周期:
      函数定义的时候创建
      浏览器关闭的时候销毁
  执行上下文的生命周期:
      函数调用的时候创建
      函数调用结束之后被释放 下一轮垃圾回收机制运行时正式销毁
  闭包的生命周期:
      闭包有个必要的前提: 函数产生了嵌套,内部函数使用了外部函数的变量 就会产生闭包
      闭包在外部函数调用时创建的!!
      当内部函数被设置为null时 闭包被释放(游离) 下一轮垃圾回收机制运行时正式销毁

###闭包

  闭包有个必要的前提:
           函数产生了嵌套,内部函数使用了外部函数的变量 就会产生闭包
           当函数可以记住并访问自己的作用域链时就会产生闭包
   闭包什么时候被创建
           闭包在外部函数调用时创建的!!
   闭包什么时候销毁
           当内部函数被设置为null时 闭包被释放(游离) 下一轮垃圾回收机制运行时正式销毁
   闭包的位置
           内部函数的作用域
   闭包的作用
            延长外部函数变量的生命周期
   闭包的缺点
            容易产生内存泄漏
            前端没有高并发(没有多线程开发)
            不用太在意内存泄漏
   闭包的应用
            this的劫持
            模块化

   闭包和内部函数是一一对应的关系!!!!!!

###原型


       原型分显式原型 隐式原型
                 显式原型 js中所有的函数具有显式原型
                 隐式原型 js中所有的对象具有隐式原型
                 对象的隐式原型 指向其构造函数的显式原型

                 Fuction的__proto__指向Fuction的prototype
                 所有的原型对象都是一个{}
                 所有的原型对象.__proto__ === Object.prototype
                 Object.prototype.__proto__ === null
                 所有的原型对象都有一个constructor属性 指向原函数

###原型链

        隐式原型链

    为什么要有原型链

           属性的查找与设置

                查找:先在对象的直接属性中找  找到了就返回   找不到就访问原型链    整条原型链都没有  返回undefined

                设置:只影响对象的直接属性

   怎么用原型链

          继承

        a  instanceof b (a:对象   b:函数)

               b的显式原型是否出现在了a的隐式原型链上

###方法的重写

     低层的原型对象上的属性    覆盖了   高层原型对象上的属性

###怎么判断一个对象是数组

    1.isArray

    2.Object.prototype.toString.call(Obj) 如果返回的字符串中包含Array 说明obj是数组 

    3.a instanceof Array 如果返回true就是数组

###对象的创建方式

     1.Object构造
     2.字面量
           前端在处理业务逻辑时 对类型的依赖性不强(将数据放到页面上进行展示)
           后台在处理业务逻辑时 对类型的依赖性很强(后台的数据和数据库中和每一张表进行对应)

     3.工厂模式
     4.自定义构造函数
     5.自定义构造函数+原型链
     6.Object.create(obj)
         创建处于一个已经被指定隐式原型指向的实例对象

###继承

    1.构造函数继承
         显式调用父类的函数
    2.原型链继承
        将子类的显式原型改成一个父类的实例对象
    3.组合继承
         构造函数继承(属性)+原型链继承(方法)
            方法:属性值为函数的属性

###this指向的优先级

     构造调用>显式调用>隐式调用>普通调用




















原文地址:https://www.cnblogs.com/fxiong/p/10163883.html