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 2024-五一综合模拟赛
  • ¥15 下图接收小电路,谁知道原理
  • ¥15 装 pytorch 的时候出了好多问题,遇到这种情况怎么处理?
  • ¥20 IOS游览器某宝手机网页版自动立即购买JavaScript脚本
  • ¥15 手机接入宽带网线,如何释放宽带全部速度
  • ¥30 关于#r语言#的问题:如何对R语言中mfgarch包中构建的garch-midas模型进行样本内长期波动率预测和样本外长期波动率预测
  • ¥15 ETLCloud 处理json多层级问题
  • ¥15 matlab中使用gurobi时报错
  • ¥15 这个主板怎么能扩出一两个sata口
  • ¥15 不是,这到底错哪儿了😭