0

В чем различие между (someVal) => {DoSomething} и function(someVal){DoSomething} ?

Проявилось вот в этом куске кода

let latestNews = $('.time-articles');
        latestNews.find('.article.text_bold').each(() => {
        time = $(this).find('.article__time').text()}

В этом случае this - это window

Если заменить на function() - то приходят найденные элементы

let latestNews = $('.time-articles');
        latestNews.find('.article.text_bold').each(function () {
        time = $(this).find('.article__time').text()}

2 Answers2

2

Выражения стрелочных функций имеют более короткий синтаксис по сравнению с функциональными выражениями и лексически привязаны к значению this (но не привязаны к собственному this, arguments, super, или new.target). Стрелочные функции всегда анонимные

https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Functions/Arrow_functions

CoonJS
  • 627
1

Стрелочная функция всегда привязывается к тому контексту, в котором она находится.

В Вашем случае this нужно заменить на latestNews.

Можно переписать Ваш код так:

let latestNews = $('.time-articles');
    latestNews.find('.article.text_bold').each(() => {
    time = $(latestNews).find('.article__time').text()}
Russell
  • 131
  • Замена this на latestNews здесь приведет совсем к другому результату нежели с использованием function. В случае с function переменная this последовательно примет значения содержимого элементов .article__time, а в вашем решении time будет иметь идентичное значение на всех итерациях. – Maxim Zasorin Nov 29 '17 at 09:59
  • Действительно. В таком случае код можно сократить до двух строк let latestNews = $('.time-articles'); time = latestNews.find('.article__time').text(); – Russell Nov 29 '17 at 10:21
  • Так тоже не получится, метод text() возвращает объединенный текст из всех элементов, здесь лучше вообще отказаться от стрелочной функции, либо для получения текста брать второй ее аргумент. – Maxim Zasorin Nov 29 '17 at 11:19