Какой резон передавать функции в другое место?
Читаю учебник. Хотя, это не первое упоминание о такой возможности, но. тем не менее, очередной раз я об этом услышал, но никаких доводов логичных для подобных возможностей в языке не сказано.
Вот пример: var f = function factorial(n) { return n ? n*factorial(n-1) : 1; }; var g = f; // скопировали ссылку на функцию-факториал в g f = null; alert( g(5) ); // 120, работает! Я вижу это так: 1. Копирование функции в другую переменную производить дублирование кода. 2. Увеличивает количество используемой памяти. Ведь если есть функция, и она работает как нужно, то её нужно использовать, а не копировать куда-то, а потом использовать под другим именем. Абсурд какой-то, на первый взгляд. Вот и хочется увидеть адекватный вариант применения такого похода, если, конечно, кто-нить это вообще использует. |
Цитата:
https://learn.javascript.ru/object-reference |
Цитата:
Я провожу аналогию. Такого в других языках не встречалось.. Дико, на самом деле)) |
Цитата:
|
Цитата:
|
Что вам найти применение ссылок в Си или сами найдете?
|
https://www.youtube.com/watch?v=4oud...eWwem&index=21
первые две минуты |
Цитата:
А вот какой с этого толк - тема не раскрыта. Как я понимаю, используется это не часто. Как попадётся где-нить, то можно будет увидеть причину использования такого подхода.. |
Будут асинхронные запросы, тогда и вопрос решится )
|
hoz,
почитайте про замыкания в яваскрипте, когда из функции возвращается другая ф-я. Там эта возможность широко используется. Для объектов/массивов очевидное применение - передача параметров в функцию по ссылке, чтобы не копировать большие объёмы данных лишний раз. |
1 - Копирование функции
В JS как и в других языках нет оператора копирования есть оператор присваивания. т.е. никакого копирования происходить не может. Обычно происходит присваивание переменной результата выражения стоящего справа. оператор function всегда создает новую функцию и возвращает ссылку на нее. 2 - "базовой переменной" в языке нет такого типа данных как "базовая переменная". 3 - Я имел ввиду Java, C#, ... двух такого нет. Забавно я всегда думал что библиотеки в этих языках на 99.999% состоят из ссылочных типов google Очень важно различать сам объект и ссылку на объект. Присваивание для сложных типов всегда копирует ссылку на объект. Присваивание для примитивных типов создает новый объект и копирует значение полученное по ссылке. Более наглядно это можно посмотреть в отладчике браузера. например в хроме клавиша F12->вкладка Memory-> и кнопка получить снапшот и ты увидишь все объекты используемые на странице. те же функции числа и даже булевы значения. Для доступа к этим данным в JavaScript используются высокоуровневая абстракция в виде двух древовидных структур(глобальная область видимости и текущий scope) которые позволяют манипулировать данными через имена переменных.Наглядно увидеть ссылки на данные можно набрав в console.log(window) в консоли. К теме вопроса "Какой резон передавать функции в другое место?" Функция становится такой же переменной как число строка или объект. подробнее Пример в учебнике пытается наглядно показать что "ссылка на функцию" и "сама функция" это разные понятия и ссылкой на функцию можно манипулировать как переменной (принимать передавать изменять). Простой пример где используется присвоение функций переменным это обработчики событий. Это позволяет создавать и изменять объекты на лету в момент исполнения программы. |
Часовой пояс GMT +3, время: 13:47. |