Как console log работает без вызова с параметром?

218
06 февраля 2020, 03:20

Недавно встретил в интернете такой коментарий:

.then(msg => console.log(msg))
это то же самое что и
.then(console.log)

Подскажите, пожалуйста, как работает данная конструкция. Возможно есть какое-то название этого способа применения.

Answer 1

Как я понял Вас интересует вторая запись

 .then(console.log)

здесь в функцию then передается ссылка на функцию log, находящуюся в объекте console, эта функция будет вызвана асинхронно потом.

при этом код функции then примерно такой, setTimeout я тут выбрал для ясности, чтобы показать асинхроность происходящего:

  waiter.then = function(callbackFunc) {
    setTimeout(function() {
          callbackFunc("finish");
    }, 1000);
  }

Эта концепция называется функциональное программирование, функция принимающая на вход функцию называется функцией высшего порядка

В javascript это на каждом углу, и это очень удобно, лучше как можно раньше с этим разобраться

Answer 2
var handlerThen = msg => console.log(msg);
.then(handlerThen)
var handlerThen = function(msg) { console.log(msg); };
.then(handlerThen)
var handlerThen = console.log;
.then(handlerThen)

будут делать одно и то же.

Answer 3

Это называется стрелочная функция. console.log() тут не причём. var handletThen = function(msg) {

}.then(...) 
var handlerThen = msg => console.log(msg);
.then(handlerThen)

В начале мы видим стандартную запись функции. Но чтобы не было таких обширных записей, в ES6 добавили стрелочные функции, которые записываются вот так: (аргументы) => {код}, это всё таже функция, но у неё есть некоторые отличия от обычной, о которых вы можете почитать в интернете, я же скажу, что если в такую функцию вы передаёте 1 параметр, то скобки можно опустить, то есть: "argument => {...}", такая запись не вызовет ошибку. Если аргументов больше, () обязательны!!: (argument1, argument2) => {...}, и также если аргументов нет, скобки тоже обязательны!: () => {...}. Если данная функция записана как: () => {return console.log("Hello!")}, её можно сократить до () => console.log("Hello") и парсер сам поймёт что данную строку нужно вернуть как результат работы стрелочной функции.

READ ALSO
Как получить все роли сервера Discord?

Как получить все роли сервера Discord?

Пишу бота для дискордаНужно получить все роли сервера

229
Создать таблицу на jQuery

Создать таблицу на jQuery

Я хочу использовать значения 2 полей ввода и сделать таблицу<tr> должны быть равны значению, заданному в #inp1, а <td> - #inp2

258
Подсчет checkbox в калькуляторе

Подсчет checkbox в калькуляторе

Более менее довел калькулятор до умаГлавная трудность с чекбоксами: Нужно значения выделенных чекбоксов прибавлять к общей сумме с условием:...

275
Пересборка пакета node.js

Пересборка пакета node.js

Всем доброй ночиПодтянул node-modules для Vue

266