Прежде всего, есть концепция: это не язык, поддерживающий функции. Этот язык можно назвать «функциональным языком». Помимо вызова, функции в функциональных языках обладают и некоторыми другими свойствами. Есть три момента:
1. Функции — это операнды
2. Сохраните данные внутри функции.
3. Операции внутри функции не имеют побочных эффектов вне функции.
1. Функции — это операнды
Вызов обычной функции абстрактно можно понимать так: функция является оператором, а передаваемые параметры являются операндами;
Но когда функция в JavaScript используется как параметр другой функции, передается ссылка, и этот «входящий параметр» можно понимать как операнд. Вывод таков: функции (как «входящие параметры») имеют значение операндов, а «параметры функции» ничем не отличаются от обычных параметров.
2. Сохраните данные внутри функции.
В императивных языках частные переменные (локальные переменные) внутри функций не могут быть сохранены. С точки зрения выполнения программы локальные переменные размещаются в стеке, и после завершения выполнения функции занятый стек освобождается. Поэтому данные внутри функции не могут быть сохранены.
В функции JavaScript можно изменять частные переменные внутри функции, и при повторном входе в функцию измененное состояние сохранится. Следующий пример иллюстрирует эту функцию:
Скопируйте код кода следующим образом:
вар установить, получить;
функция MyFunc(){
значение вар = 100;
функция set_value(v){
значение = v;
}
функция get_value(){
возвращаемое значение;
}
установить = set_value;
получить = получить_значение;
}
МояФунк();
консоль.журнал(получить()); //100
набор(300);
консоль.журнал(получить()); //300
Очевидным преимуществом является то, что если часть данных может быть сохранена внутри функции, то функция (как конструктор) может использовать данные для выполнения операций при назначении экземпляру и между несколькими экземплярами, поскольку данные существуют в разных In; закрытия, они не будут влиять друг на друга.
Если объяснить это с точки зрения объектно-ориентированного подхода, это означает, что разные экземпляры имеют свои собственные частные данные (скопированные из некоторых общедоступных данных). Следующий пример иллюстрирует эту функцию:
Скопируйте код кода следующим образом:
функция МойОбъект(){
значение вар = 100;
this.setValue = функция(){
значение = v;
}
this.showValue = функция(){
console.log(значение);
}
}
вар obj1 = новый MyObject();
вар obj2 = новый MyObject();
obj2.setValue(300);
объект1.showValue(); //100;
3. Операции внутри функции не имеют побочных эффектов вне функции.
Смысл этой функции заключается в следующем:
* Функция использует входной параметр для выполнения операций без его изменения (используется как параметр-значение, а не как переменный параметр).
* Значение других данных вне функции (например, глобальных переменных) не будет изменено во время операции.
* После завершения операции значение передается во внешнюю систему через «возврат функции».
Такие функции не оказывают побочного воздействия на внешнюю систему во время работы. Однако мы заметили, что JavaScript позволяет ссылаться на глобальные переменные и изменять их внутри функций, а глобальные переменные можно даже объявлять. Это фактически разрушает его функциональные характеристики.
Кроме того, JavaScript также позволяет изменять члены объектов и массивов внутри функций — эти члены должны изменяться методами объекта, а не другими функциями вне объектной системы.
Итак: Эта особенность JavaScript может быть гарантирована только программными навыками разработчиков.