美文网首页
JavaScript--模型、闭包、链

JavaScript--模型、闭包、链

作者: 春铃邃晓 | 来源:发表于2018-02-28 22:28 被阅读0次

    (1)事件模型
    JavaScript中有两种时间模型:DOM0,DOM2

    DOM0级事件模型是早期的事件模型,所有的浏览器都是支持的,而且其实现在也是比较简单的。

    DOM2级时间模型:事件捕获和事件冒泡;注册事件和解除事件。
    在DOM2级中使用addEventListener和removeEventListener来注册和解除事件(IE8级之前的版本不支持)。
    这种函数较之之前的方法好处是一个dom对象可以注册多个相同类型的事件,不会发生事件的覆盖,会依次的执行各个事件函数。

    (2)闭包
    比如举个例子:有a,b,c三个函数,b是a的子函数,a返回b,c是a外的一个函数,c引用了a内的子函数b这就创建了一个闭包。闭包是指有权限访问另一个函数作用域的变量的函数。
    闭包的作用:说简单就是,闭包的作用就是在a执行完并返回后,闭包使得Javascript的垃圾回收机制GC不会收回a所占用的资源,因为a的内部函数b的执行需要依赖a中的变量。

    当function里嵌套function时,内部的function可以访问外部function里的变量。
    但这还不是闭包。当return的是内部function时,就是一个闭包。内部function会close-over外部function的变量直到内部function结束。

    function foo(x) {
          var tmp=3;
          return function(y){
              alert(x+y+(++tmp));
           }
      }
    var bar=foo(2);//bar现在是一个闭包 bar(10)
    

    实际上闭包的概念就是为了避免内存泄漏而存在的,闭包重点(意义)就是理解JS的作用域,理解了作用域,方能更主观的避免内存泄漏(好一点的教程都会将闭包跟作用域联系在一起)。

    (3)原型链(看不懂)
    JS在创建对象(不论是普通对象还是函数对象)的时候,都有一个叫做proto的内置属性,用于指向创建它的函数对象的原型对象prototype。以上面的例子为例:

    console.log(zjh.__proto__ === person.prototype) //true
    

    同样,person.prototype对象也有proto属性,它指向创建它的函数对象(Object)的prototype

    console.log(person.prototype.__proto__ === Object.prototype) //true
    

    继续,Object.prototype对象也有proto属性,但它比较特殊,为null

    console.log(Object.prototype.__proto__) //null
    

    我们把这个有proto串起来的直到Object.prototype.proto为null的链叫做原型链。

    pic2.png
    pic3.png

    相关文章

      网友评论

          本文标题:JavaScript--模型、闭包、链

          本文链接:https://www.haomeiwen.com/subject/dxkmxftx.html