JS中函数的this大解析【笔记】

文章通过示例解释了JavaScript中this的指向规则,特别是箭头函数的不同之处。在不同函数调用方式下,this的值会有所变化,而箭头函数不具有自己的this,它会捕获其所在(即定义时)的作用域的this值。
摘要由CSDN通过智能技术生成

体验下面的练习,就能理解 this 指向和箭头函数里面的 this 指向。

var name = "window"
var obj1 = {
    name: '1',
    fn1: function(){
        console.log(this.name)
        },
    fn2:() => console.log(this.name),
    fn3:function() {
        return function() {
        console.log(this.name)
            }
        },
    fn4:function() {
        return() => console.log(this.name)
            }
        }
    var obj2 = {
    name: '2'
}
obj1.fn1() //1
obj.fn1.call(obj2) //this指向obj2 2
obj1.fn2() //找父作用域里面的name 就是 window
obj1.fn2.call(obj2) //不支持显示绑定 还是 window
obj1.fn3()() //返回的函数是独立调用 所以this指向 window
obj1.fn3().call(obj2) //返回的函数显示绑定给了obj2 所以this指向obj2 2
obj.fn3.call(obj2)() //改变了父级作用域的this指向即指向obj2 但是内部函数还
是独立调用 即 window
obj1.fn4()() //this取决于父作用域fn4 即obj1 1
obj1.fn4().call(obj2) //返回箭头函数 不存在显示绑定 所以 1
obj1.fn4.call(obj2)() // 将箭头函数的父级作用域指向给了obj2 所以输出 2

深刻理解一下箭头函数的this:

// ES6
const obj = {
    getArrow() {
        return () => {
            console.log(this === obj);//箭头函数没有自己的this
        };
    }
}
//上述代码转化为es5
var obj = {
    getArrow: function getArrow() {
        var _this = this;
        return function () {
            console.log(_this === obj);
        };
    }
}
​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值