Я просто читал книгу «Вы не знаете JS» от kyle simpson и наткнулся на следующий грех-код кода, который несколько смутил меня. в основном я читал тему по ключевому слову this
. Ниже приводится фрагмент кода:Косвенные ссылки на функции в javascript
function foo() {
console.log(this.a);
}
var a = 2;
var o = { a: 3, foo: foo };
var p = { a: 4 };
o.foo(); // 3
(p.foo = o.foo)(); // 2
До сих пор читает книгу, я понимаю, как это работает, но для меня его трудно понять, Что на самом деле происходит на последней строке сниппета.
Если я проанализирую его по самой последней строке, это iffe, выполняющийся в глобальной области видимости, и если в iffe выполняется fuction() fuction, this.a в функции foo() будет указывать на a в глобальной объем, который действительно равен 2.
Но почему-то я не чувствую, что полностью понимаю, что происходит на последней строке, может кто-то сломать его для меня?
спасибо.
Alexander.
Что именно отсутствует? Значение выражения присваивания - это назначенное значение. –
Кстати, это похоже на * разработанный *, чтобы запутать больше, чем преподавать ... –
Возвращаемое значение присваивания всегда является самим значением. Поэтому два шага выполняются в одной строке. 1. 'p.foo = o.foo;' 2. 'foo();' – Simon