Я смущен этой функцией:

const today = ( d => new Date() )(new Date);

Поэтому я не уверен, где об этом читать, и я не уверен, как это вообще называется. Поэтому я прошу прощения за ужасный вопрос названия. В любом случае, я не совсем понимаю, что (new Date) делает в конце функции здесь. Может кто-нибудь указать мне на ссылку на то, что здесь происходит, или объяснить мне.

Я понимаю new Date() неразборчивость. Это на самом деле просто цель и функциональность (new Date) в конце, которые сбивают меня с толку.

1
Thomas Valadez 27 Фев 2018 в 07:17

4 ответа

Лучший ответ

Вы вызываете функцию сразу после ее создания, как IIFE, поэтому переменная результата будет содержать переданный вами результат. Вы делаете то же самое с функцией стрелки.

В приведенном ниже примере оба выражения одинаковы. Это вызывает функцию немедленно:

const today = d => console.log(d);
today(new Date)
const today = ( d => console.log(d) )(new Date());

// In ES5 normal IIFE

(function(d){
  console.log(d);
})(new Date())
1
user4642212 27 Фев 2018 в 04:30

Здесь у вас есть простая функция, которая принимает параметр с именем d и возвращает new Date

const f = d => new Date();

console.log(f());

Затем вы немедленно вызываете эту функцию с () передачей нового Date объекта, который не используется в функции

Этот код эквивалентен

const today = (d => new Date())(new Date)

К этому

const func = d => new Date();
const today = func(new Date);

В первой части с одной строкой разница в том, что вы потеряли созданную вами функцию, потому что она не была назначена ни для чего. Вы создали и назвали это немедленно.

2
Suren Srapyan 27 Фев 2018 в 04:21

Это выглядит более запутанным, чем на самом деле. Если мы сломали это:

// The following function returns a new Date
// regardless of any arguments passed to it

const someFunction = d => newDate();

// This could also be written as
const theSameFunction = () => newDate();

IIFE (немедленно вызываемое выражение функции) - это то, которое запускается немедленно по определению. Это можно сделать, поместив анонимную функцию в круглые скобки и вызвав ее:

( () => console.log('Hello world') )();

// prints 'Hello world' to the console

Собираем все это вместе:

const today = ( d => new Date() )(new Date);
// The d argument here is useless,
// since it is never used in the return of the IIFE

const alsoToday = ( () => new Date() )();
// This achieves the same effect as the first IFFE
1
stukilgore 27 Фев 2018 в 04:42
const today = ( d => new Date() )(new Date);
▙▂▂▂▂▂▂▂▂▟   ▙▂▂▂▂▂▂▂▂▂▂▂▂▂▂▂▟ ▙▂▂▂▂▂▂▂▟
    ▐                  ▐               ▐
 variable     function definition    function invocation/call
  • today будет содержать значение, возвращаемое анонимной функцией
  • анонимная функция рассеется в эфир
  • сначала анонимная функция принимает бессмысленный аргумент new Date, полностью игнорирует его и возвращает значение new Date() (назначается today)
1
vol7ron 27 Фев 2018 в 04:39