以下代码的输出结果是什么(this 综合题)?
const obj = {
name: 'obj',
fn: function() {
console.log(this.name);
}
};
const fn = obj.fn;
fn();
obj.fn();
(obj.fn)();
(fn, obj.fn)();
请问输出结果是什么?
回答
苦行僧
输出:undefined(或报错)、'obj'、'obj'、undefined(或报错)
逐行分析:
-
fn():隐式丢失。obj.fn提取后再调用,this 退化为默认绑定。非严格模式指向window(window.name通常为空),严格模式为undefined导致TypeError。 -
obj.fn():隐式绑定,this 指向obj,输出'obj'。 -
(obj.fn)():分组运算符不改变引用类型,仍然是属性访问表达式,等同于obj.fn(),输出'obj'。 -
(fn, obj.fn)():逗号运算符返回最后一个表达式的值,即obj.fn的函数本身。此时已脱离对象,退化为独立函数调用,this 为默认绑定。