Дан JavaScript-код: "const obj = {x:1}; function foo(){ console.log(this.x); } obj.bar = foo; const f = obj.bar; f();" — объясните, что выведется и почему, с учётом привязки this
Выведется обычно "undefined". Почему: - В объекте задано свойство `x: .........`. - При вызове `f()` функция вызывается как обычная (без объекта), поэтому значение `this` определяется по месту вызова, а не по месту присвоения. В не‑строгом режиме `this` становится глобальным объектом (у которого `x` не задано → `undefined`). В строгом режиме `this` — `undefined`, и попытка доступа к `this.x` приведёт к TypeError. Если бы вы сделали `obj.bar()` — тогда `this` указывал бы на `obj` и в консоль вывелось бы .......... Чтобы сохранить привязку к `obj` при отдельном вызове, используйте, например, `const f = obj.bar.bind(obj);`.
- В объекте задано свойство `x: .........`.
- При вызове `f()` функция вызывается как обычная (без объекта), поэтому значение `this` определяется по месту вызова, а не по месту присвоения. В не‑строгом режиме `this` становится глобальным объектом (у которого `x` не задано → `undefined`). В строгом режиме `this` — `undefined`, и попытка доступа к `this.x` приведёт к TypeError.
Если бы вы сделали `obj.bar()` — тогда `this` указывал бы на `obj` и в консоль вывелось бы .......... Чтобы сохранить привязку к `obj` при отдельном вызове, используйте, например, `const f = obj.bar.bind(obj);`.