WDNMde_ 2021-08-01 13:53 采纳率: 50%
浏览 21
已结题

关于#javascript#的this指向问题:上面段代码会输出calc1这个对象但为什么下面这段代码是输出window对象呢

const calc1 = {
            add: function() {
                const adder = () => {
                    console.log(this);
                };
                adder();
            }
        }
        calc1.add();

上面段代码会输出calc1这个对象
但为什么下面这段代码是输出window对象呢?

const calc1 = {
            add: function() {
                const adder = function (){
                    console.log(this);
                };
                adder();
            }
        }
        calc1.add();

请解析一下思路!

  • 写回答

1条回答 默认 最新

  • 八云黧 2021-08-01 14:51
    关注

    这种情况找官方文档是最标准的this-MDN
    js的this是个挺复杂的东西,和严格模式、js运行的平台、函数调用、箭头函数都有关,文档已经说的很详细。
    简单来说在函数内部,this的值取决于函数被调用的方式。因为下面的代码不在严格模式下,且 this 的值不是由该调用设置的(adder是直接被调用的),所以 this 的值默认指向全局对象,浏览器中就是 window。
    而箭头函数例外,在箭头函数中,this与封闭词法环境的this保持一致。即与外层add函数的this保持一致,所以是calc1对象

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月9日
  • 已采纳回答 8月1日
  • 创建了问题 8月1日

悬赏问题

  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图
  • ¥15 关于#DMA固件#的问题,请各位专家解答!
  • ¥15 matlab生成的x1图不趋于稳定,之后的图像是稳定的水平线
  • ¥15 请问华为OD岗位的内部职业发展通道都有哪些,以及各个级别晋升的要求
  • ¥20 微信小程序 canvas 问题
  • ¥15 系统 24h2 专业工作站版,浏览文件夹的图库,视频,图片之类的怎样删除?
  • ¥15 怎么把512还原为520格式
  • ¥15 MATLAB的动态模态分解出现错误,以CFX非定常模拟结果为快照
  • ¥15 求高通平台Softsim调试经验