#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.
Другими словами:
- Добавление
return
операторов там, где предполагается, что они существуют (подразумевается в функциях со стрелками) - Добавьте
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
— это простое число.