windows,function,arrow的恋爱循环

在尝试编写程序的时候发现了一个有趣的现象:

执行结果如下: 

 

发现问题:普通函数和箭头函数中的”this“指向不一致 

        且普通函数中的”this“指向为click事件绑定的btn;

        箭头函数中的”this“指向为document(btn的上级元素,这里权当理解,后面我们会详细解析)

在MDN上查找相关概念后,得出结果(这里为MDN原文)

        与其他语言相比,函数的 this 关键字在 JavaScript 中的表现略有不同,此外,在严格模式和非严格模式之间也会有一些差别。

        在绝大多数情况下,函数的调用方式决定了 this 的值(运行时绑定)。this 不能在执行期间被赋值,并且在每次函数被调用时 this 的值也可能会不同。ES5 引入了 bind 方法来设置函数的 this 值,而不用考虑函数如何被调用的。ES2015 引入了箭头函数,箭头函数不提供自身的 this 绑定(this 的值将保持为闭合词法上下文的值)。

        在函数内部,this的值取决于函数被调用的方式。

        因为下面的代码不在严格模式下,且 this 的值不是由该调用设置的,所以 this 的值默认指向全局对象,浏览器中就是 window

        然而,在严格模式下,如果进入执行环境时没有设置 this 的值,this 会保持为 undefined

通俗的理解(这里为个人理解)

        也就是说

        对于普通函数中的”this“指的就是事件(如上文的click)所绑定的对象(如上文的btn);

        但对于箭头函数来说,他没有属于自己的对象,但为了自己的尊严,他会向上一级去寻找,在上面的案例中,他找到的是btn的"父级”--document(由于这里使用了$(function(){})

参考文档:MDN

相关链接:this - JavaScript | MDN (mozilla.org)icon-default.png?t=N6B9https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/this

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值