Javascript — проблема с функцией стрелки

#javascript

#javascript

Вопрос:

Я новичок в Javascript, и мой учитель дал мне этот код :

 var z = (x=>(y=>2*y)(x) 3)(5);
 

(Извините за мой английский, я француз с плохим уровнем английского ^^)

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

Для меня я могу переписать этот код следующим образом :

 var x = 5;
var y = 2 * x;
var z = y   3;
 

Но это не перезапись с помощью простых функций.

Мой вопрос: можете ли вы помочь мне понять, как работает функция стрелки в этом случае, и дать мне представление о том, как переписать этот код с помощью простых функций.

Ответ №1:

Функции со стрелками, которые имеют a => b форму, неявно возвращаются b при вызове. Вы можете представить их как:

 function (a) { return b }
 

Кроме того, ваш пример кода оборачивается () и немедленно вызывается, шаблон, известный как выражение функции, вызываемое немедленно (IIFE):

 (a => b)(3)
 

что совпадает с

 (function (a) { return b })(3)
 

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

Теперь все, что вам нужно сделать, это использовать эти две идеи, неявные возвраты и IIFEs для функций со стрелками, чтобы переписать ваш пример как простые функции с явными возвратами и обычными IIFEs.

Другими словами:

  1. Добавление return операторов там, где предполагается, что они существуют (подразумевается в функциях со стрелками)
  2. Добавьте function() аргументы каждой функции стрелки.

Вот что происходит в вашем примере кода на простом английском языке:

  • Переход 5 в IIFE, который занимает x
  • Передайте это x другому IIFE, который занимает y
  • Возврат 2 * y из второй IIFE
  • Добавить 3 к тому, что было возвращено из второй жизни
  • Возвращает результат из первого IIFE

Или как математическая формула:

 z = x = (2 * y)   3
 

Комментарии:

1. Большое спасибо, я узнаю больше о внутренней жизни, но я понял свое упражнение с вашим ответом.

2. Нет проблем, приятель, рад помочь

Ответ №2:

У нас есть:

 var z = (x=>(y=>2*y)(x) 3)(5);
 

В определении функции стрелки говорится, что x=>(....) это означает (function(x){ return ...})

Итак

 var z = (function(x) {
    return (y=>2*y)(x) 3;
})(5);
 

Это означает, что теперь у нас есть другая функция стрелки y=>2*y (function(y) { return 2*y}) .

Итак

 var z = (function(x) {
    return (function(y) {
            return 2*y;
        })(x)   3;
})(5);
 

И это все.

Помните, что (function(){})() это анонимное объявление функции, выполняемое немедленно. Итак, в конце var z — это простое число.