• JS系列


    this的绑定方式:

    • 默认绑定(非严格模式下this指向全局对象, 严格模式下this会绑定到undefined)

    • 隐式绑定,this 永远指向最后调用它的那个对象(如 obj.foo()的调用方式, foo内的this指向obj)

    • 显示绑定(apply、call、bind)

    • new绑定

    • 箭头函数绑定(this的指向由外层作用域决定的)

    一些特殊例子:

    1. let 或者 const,变量是不会被绑定到window上的;var 会

    let a = 10 ;const b = 20;

    function foo () { console.log(this.a);console.log(this.b) }

    foo(); console.log(window.a)

    答案:undefined  undefined  undefined

     
     

    2.把一个函数当成参数传递到另一个函数的时候,也会发生隐式丢失的问题,与包裹着它的函数的this指向无关。在非严格模式下,this绑定到window上,严格模式undefined

    var a = 2

    function foo () { console.log(this.a) }

    function doFoo (fn) {

    // obj2.doFoo 调用该函数,this指向obj2,但是之后调用fn(就是foo)函数,this 指向的是 window

     

    console.log(this)

    fn()

    }

    var obj = { a: 1, foo }

    var obj2 = { a: 3, doFoo }

    obj2.doFoo(obj.foo) // 结果:{ a:3, doFoo: f } 和 2

     

    3.匿名函数,它里面的this在非严格模式下始终指向的都是window

    var a = 3

    var obj2 = {

    a: 2,

    foo1: function () {console.log(this.a)},

    foo2: function () {

    setTimeout(function () {

    console.log(this) console.log(this.a)

    }, 0)

    }

    }

    obj2.foo1(); obj2.foo2() // 结果:2 window 3

     
     
     
     
     
  • 相关阅读:
    死锁篇
    java线程池
    sql server 多行数据指定字符串拼接
    动态提交 表格
    ABP
    DDD学习
    sql 语句插入数据返回id
    Post方式提交,通过上下文HttpContext,Request[""]获取
    JQ的过滤隐藏
    sql 查询有多少行
  • 原文地址:https://www.cnblogs.com/vs1435/p/13109161.html
Copyright © 2020-2023  润新知