问答题490/1587下面代码的输出是什么?

1const obj = { 2 fn1: () => console.log(this), 3 fn2: function() {console.log(this)} 4} 5 6obj.fn1(); 7obj.fn2(); 8 9const x = new obj.fn1(); 10const y = new obj.fn2();
难度:
2023-05-30 创建

参考答案:

在上面的代码中,obj 对象包含两个方法 fn1 和 fn2。fn1 使用箭头函数定义,而 fn2 使用普通函数定义。

对于箭头函数,它没有自己的 this 值,也就是说它会捕获上下文中的 this 值,因此 fn1 中的 this 指向的是全局对象 window(或者 undefined,如果运行环境是严格模式)。因此,当我们调用 obj.fn1() 时,输出结果为 window(或 undefined)。

对于普通函数,它的 this 值是在运行时动态绑定的。因此,当我们调用 obj.fn2() 时,输出结果为 obj 对象本身

接下来,代码中分别使用 new 运算符创建了 obj.fn1 和 obj.fn2 的实例 x 和 y。

**由于箭头函数没有自己的 this 值,所以尝试使用 new 运算符创建实例会导致 TypeError 错误。**也就是 new obj.fn1() 会报错。

而对于普通函数,new 运算符可以正确地创建实例,并且 this 值指向新创建的实例对象。但因为上面执行 new obj.fn1() 时 js 已经报错,new obj.fn2(); 并不会执行。

最近更新时间:2024-08-10

赞赏支持

预览

题库维护不易,您的支持就是我们最大的动力!