Задача на this и области видимости

Что выведет код и почему.

function foo() {
    const x = 10;
    return {
        x: 20,
        bar: () => {
            console.log(this.x);
        },
        baz: function() {
            console.log(this.x);
        }
    };
}

const obj1 = foo();
obj1.bar(); // ?
obj1.baz(); // ?

Доп вопрос 1.

А что если так?

function foo() {
    const x = 10;
    return {
        x: 20,
        bar: () => {
            console.log(this.x);
        },
        baz: function() {
            console.log(this.x);
        }
    };
}

const obj1 = foo();
obj1.bar(); // ?
obj1.baz(); // ?

const obj2 = foo.call({ x: 30 });
let y = obj2.bar; 
let z = obj2.baz; 

y(); // ?
z(); // ?

Оставьте комментарий