美文网首页
2018-01-10

2018-01-10

作者: ultimater | 来源:发表于2018-01-11 00:29 被阅读5次

    你不知道的js上篇

    1. 关于this
      1. 为什么要用this,显式传递上下文对象会让代码变得越来越混乱,使用this更优雅的隐式传递一个对象的引用
      2. 误解指向自身和函数作用域,this既不是指向函数自身,也不指向函数的词法作用域,实际上是在函数被调用的时发生的绑定,它指向什么完全取决于函数在哪里被调用
    2. this全面解析
      1. 熟悉调用位置,浏览器的调试工具,打断点,了解调用栈的调用位置,或者使用代码"debugger" ('堆',先进先出,‘栈’,后进先出)
      2. 如果要判断一个运行中的函数的t就this绑定,就需要找到这个函数的直接调用位置,找到之后就可以优先级顺序来判断this的绑定对象
        1. new绑定,由new调用?绑定到新创建的对象
        2. 显式绑定,由call或者apply(或者bind)调用?绑定到指定的对象
        3. 隐式绑定,由上下文对象调用?绑定到那个上下文对象
        4. 默认绑定,在严格模式下绑定到undefined,否则绑定到全局对象
      3. 一定要注意,有些调用可能在无意中使用默认绑定规则,如果想“更安全”地忽略this地绑定,你可以使用一个DMZ(空对象),比如0 = Object.create(null),以保护全局对象
      4. ES6中的箭头函数并不会使用上面的四条规则,而是根据当前的词法作用域来决定this,具体会继承外层函数调用的this绑定,相当于ES6中的self = this;的机制

    总结:以前只知道this,是谁调用的就指向谁,没成想还有这么多的绑定规则,这样在碰到问题查询this的指向,根据四个规则,安全不影响全局的方式,还由ES6的不同方式,能让心里有知其然,知其所以然

    相关文章

      网友评论

          本文标题:2018-01-10

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