
JavaScript
Js. Кто может пояснить как это работает? Переменная s не инициализированна же. Но тем не менее работает..

Ошибаешься, инициализирована: s - это не переменная, а формальный параметр функции f.
1. Sum(1) выполняет функцию Sum, которая возвращает функцию f.
2. Sum(1)(2) выполняет функцию f, возвращённую на этапе 1, с параметром s == 2; вызов функции f возвращает функцию f (т. е. саму себя).
3. Вызов Sum(1)(2)(3) выполняет функцию f. возвращённую на этапе 2, с параметром s == 3.
1. Sum(1) выполняет функцию Sum, которая возвращает функцию f.
2. Sum(1)(2) выполняет функцию f, возвращённую на этапе 1, с параметром s == 2; вызов функции f возвращает функцию f (т. е. саму себя).
3. Вызов Sum(1)(2)(3) выполняет функцию f. возвращённую на этапе 2, с параметром s == 3.
Владимир Варевцев
Это не переменная получается? потому как выше функции у меня нет глобальной s в коде. Этот скрин - это весь код.
Владимир Варевцев
Если я вместо s поставлю любое другое - то работать уже не будет.
Владимир Варевцев
А нее все равно работает... ну пзд... и чем она инициализируется... не понятно
Sum(1): result = 1 {1} // выводится из Sum, тут f НЕ выполняется
└➝ f(2): result += 2 {3} // выводится из f
└➝ f(3): result += 3 {6} // выводится из f
└➝ f
Вроде все достаточно очевидно.
// И не слушай этих "специалистов"... на самом деле s - переменная, локальная по отношению к функции f, то есть существует в ее внутреннем LE. Инициализация этой переменной естессно при вызове выполняется (автомагически, как и ее объявление ранее, при объявлении функции), при условии что значение передано аргументом. Если конкретнее - инициализируется s при создании контекста вызова f: контекст это внутренняя структура, содержащая состояние всех переменных в LE функции... при заполнении этой структуры и происходит присваивание значений локальным переменным неявно объявленным как параметры.
└➝ f(2): result += 2 {3} // выводится из f
└➝ f(3): result += 3 {6} // выводится из f
└➝ f
Вроде все достаточно очевидно.
// И не слушай этих "специалистов"... на самом деле s - переменная, локальная по отношению к функции f, то есть существует в ее внутреннем LE. Инициализация этой переменной естессно при вызове выполняется (автомагически, как и ее объявление ранее, при объявлении функции), при условии что значение передано аргументом. Если конкретнее - инициализируется s при создании контекста вызова f: контекст это внутренняя структура, содержащая состояние всех переменных в LE функции... при заполнении этой структуры и происходит присваивание значений локальным переменным неявно объявленным как параметры.
Владимир Варевцев
Да, просто необыный вид... Просто я читал, что это рекурсия и подумал, что объявленная функция работает как то иначе, полагая что это должна была быть рекурсия... Теперь когда мне объяснили алгоритм этого куска кода, ес-но не рекурсия это вовсе а просто поочередный вызов функции внутри функции.... Спасибо за ответ)))
Так это js там все не как у людей. Походу он просто копирует, то что ты передал в s и работает с тем, что есть.
Михаил Красильщиков
тебя на этом js в детском садике что ли заставляют писать? или ты еще и до садика не дорос?
норм яп. питухон куда хуже. и в данном случае ничего особенного нет. если тебя функции в функциях и прочие лямбды смущают, то ты просто хелловорлдщик и плохо знаешь возможности языков. такое даже в C++ есть так-то.
норм яп. питухон куда хуже. и в данном случае ничего особенного нет. если тебя функции в функциях и прочие лямбды смущают, то ты просто хелловорлдщик и плохо знаешь возможности языков. такое даже в C++ есть так-то.
Тут вообще нет переменной s (это переданный параметр).
>> как это работает?
Замыкается и работает.
А чтобы понять как это работает лучше использовать отладчик и делать отладку по шагам особо обращая внимание на текущее лексическое окружение и его структуру.
>> как это работает?
Замыкается и работает.
А чтобы понять как это работает лучше использовать отладчик и делать отладку по шагам особо обращая внимание на текущее лексическое окружение и его структуру.
Владимир Варевцев
В самом деле. Подставил вместо s параметр а и уже не работает. Это что то вроде особой переменной получается. А где лучше смотреть, посоветуй отладчик.?
Похожие вопросы
- Можно ли именовать переменную в JS?
- Не правельно складываются переменные js
- Работа с переменными JS
- Помогите определиться с выбором нового языка (JS(TS) vs Java)
- Js фреймворки, что полезного можно для себя найти?
- Не могу понять выражение Упростите на JS условие if(i-- && xx + yy <= 4 ), когда все переменные- числа!
- JS - как узнать, сколько раз переменная содержится в массиве?
- Как объявить глобальную переменную внутри функции в js?
- В чем цель фреймворков js web?
- Переменные окружения Node JS