美文网首页
浅谈js中this的问题

浅谈js中this的问题

作者: 光年之外iii | 来源:发表于2019-10-30 16:17 被阅读0次

    this是js中的关键字,它遵循的规则是:谁调用,指向谁

    哪个对象调用函数,函数里面的this指向哪个对象。

    var a = 1
    function test () {
        console.log(this.a)
    }
    test()
    

    直接不带任何引用形式去调用函数,则this会指向全局对象,因为没有其他影响去改变this,this默认就是指向全局对象的。这个结论是在非严格模式的情况下,严格模式下这个this其实是undefined的。

    var a = 1
    function test () {
        console.log(this.a)
    }
    var obj = {
        a: 2,
        test
    }
    obj.test()
    

    obj调用了test,所以this的指向就是obj。

    var a = 1
    function test () {
        console.log(this.a)
    }
    var obj = {
        a: 2,
        test
    }
    var obj0 = {
        a: 3,
        obj 
    }
    obj0.obj.test()
    

    即使多层嵌套,this的指向也只返回它的上一级,即obj,而不是返回obj0;

    var a = 1
    function test () {
        console.log(this.a)
    }
    var obj = {
        a: 2,
        test
    }
    var testCopy = obj.test
    testCopy()
    

    即使在obj.test中,this的指向依然还是obj
    但是,声明了变量testCopy后,再调用testCopy,此时它的指向就是window。

    var a = 1
    var test = () => {
        console.log(this.a)
    }
    var obj = {
        a: 2,
        test
    }
    obj.test()
    

    “函数被调用时(即运行时)才会确定该函数内this的指向。”现在函数这两个字要加个词修饰一下,变成普通函数(非箭头函数)才能区别于箭头函数。箭头函数中的this在函数定义的时候就已经确定,它this指向的是它的外层作用域this的指向。

    相关文章

      网友评论

          本文标题:浅谈js中this的问题

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