1

Привет.

Рассмотрим пример.

var heights = [];  // переменная, которая будет хранить высоты элементов
$("div").each(function(indx, element){
 heights.push($(element).height());
});
// в итоге, в переменную heights будут помещены значения высот всех div-элементов

Нужно отметить, что переменная this, внутри функции callback, будет хранить то же самое значение, что и второй параметр domElement, который в нее передается. Таким образом, предыдущий пример мог выглядеть следующим образом:

var heights = [];  // переменная, которая будет хранить высоты элементов
$("div").each(function(indx){
  heights.push($(this).height());
});
// в итоге, в переменную heights будут помещены значения высот всех div-элементов

Вопрос - ПОЧЕМУ переменная this, внутри функции callback, будет хранить то же самое значение, что и второй параметр domElement, который в нее передается?

this ссылается на объект, в котором лежит функция. Я вообще не понимаю, ГДЕ эта анонимная функция лежит (в какой объект она вложена). Если имею дело с обычной функцией, то я знаю, ГДЕ я ее объявил (внутри какого объекта), соответственно, знаю, куда будет ссылаться свойство this, когда пойдет отрабатывать локальный код функции.

Dimon
  • 2,059
  • Возможный дубликат вопроса: Потеря контекста вызова – Grundy Oct 05 '16 at 15:14
  • @Jean-Claude, как минимум два линка в комментарии выше. – Grundy Oct 05 '16 at 15:26
  • я все равно ничего не понял – Dimon Oct 05 '16 at 15:28
  • 1
    @Dimon, потому что надо прочитать в вопросе/ответах по ссылке, как определяется какой контекст (значение this внутри функции) будет у функции и от чего это зависит. А далее следует посмотреть в исходники jQuery и заметить, что callback вызывается с помощью функции call – Grundy Oct 05 '16 at 15:30
  • @Grundy пардон, на ссылки не обратил внимание. вы две ссылки грубо говоря на одно и то же дали, не имели ли в в виду сам метод each() https://github.com/jquery/jquery/blob/6acf4a79467a5aea5bc1eb7d552d72366718635d/src/core.js#L92 , который возвращает $.each() и откуда понятно что куда передается? – Jean-Claude Oct 05 '16 at 15:50
  • @Grundy, спасибо за ответ. теперь я разобрался – Dimon Oct 05 '16 at 15:59

1 Answers1

0

Потому, что у объекта Function в JavaScript есть метод call, вызывая который, можно передать в функцию любой this