js中的this

js中的this一直是看了又忘,其实不光是this,js中的很多东西都是这样看了就忘,不知道是只有我是这样,还是我真的不适合学js,之前学其他语言感觉都没这么困难,很多概念都搞不懂。
那么,说回this,函数被调用执行时,变量对象会被生成(准确来说此时是活动对象了),此时this指向才被确定。
当前函数的this是在函数被调用执行的时候才确定的。如果当前的执行上下文处于函数执行栈的栈顶,那么这个时候变量对象会变成活动对象,同时this的指向确定。因为是在执行时this指向才被确定,所以函数内部的this指向非常灵活且不确定。同时会因为调用方式的不同,内部的this指向不同对象。
一般来说分这三种情况:
1.对象.函数() 指向对象
2.独立调用,指向undefined,非严格模式下自动转向window(要注意不是说在全局下独立调用才指向window,而是说在任何位置,独立调用 函数()就会按照这样的规则)

var name='shuhe'
var obj={
    name:'keji',
    foo1:function(){
        console.log(this);
    }
}
var obj1={
    name:'hehe',
    foo:function(){
        var foo1=obj.foo1
        foo1()
    }
}
obj1.foo()
//指向全局

3.call,apply,bind,改变this指向。指向传入的对象,如果传入的是null,那么指向全局。

var name='shuhe'
var obj={
    name:'keji',
    foo1:function(){
        console.log(this);
    }
}
var obj1={
    name:'hehe',
    foo:function(){
        obj.foo1.call(null)
    }
}
obj1.foo()

这几天有个笔试题,然后发现自己对this掌握的并不好。

var name='shuhe'
var obj={
    name:'keji',
    foo:function(){
        console.log(this);
        (function(){
            console.log(this);
        })();
        (()=>{
            console.log(this)
        })();
    }
}
let res=obj.foo.bind({name:"latte"})
res()

我们来分析,

let res=obj.foo.bind({name:"latte"})

这一句绑定了新对象{name:“latte”},然后返回一个改变了this指向的新函数给res。
下一步调用res。然后一看这不是独立调用吗?但函数内部this仍是指向了bind绑定后的对象。原因暂且不知,真好,以为填了一个坑,结果又出来一个疑惑,js真是太让我奔溃了。
继续看,函数内部this指向{name:“latte”}那么,第一个console.log(this);打印{name:“latte”},

(function(){
      console.log(this);
})();

独立调用,指向全局

(()=>{
   console.log(this)
})();

箭头函数的this对象是定义该函数时所在的作用域指向的对象,也就是说是foo的作用域指向的对象。也就是{name:“latte”},

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值