Технопарк, весна, 2019 г.
Фу́нкция (лат. functio — «исполнение, совершение; служебная обязанность») — отношение между элементами, при котором изменение в одном элементе влечёт изменение в другом
Чистыми (pure) называются функции, не производящие побочных эффектов
"Не надо быть гением, чтобы понять, что у мира есть проблемы." © фильм Хранители
Примеры побочных эффектов: печать, сетевой запрос, изменение состояния.
Math.random
Вывод – без фанатизма.
Объектами первого класса (англ. first-class object, first-class entity, first-class citizen) в контексте конкретного языка программирования называются элементы, которые могут быть переданы как параметр, возвращены из функции, присвоены переменной.
Функции в JavaScript – объекты первого класса.
Это значит, что в JS можно создавать
функции высшего порядка
Все переменные внутри функции — это свойства специального внутреннего объекта LexicalEnvironment , который создаётся при её запуске
function sayHello(name) {const magicNumber = 42;console.log(`Hello, ${name}`);}sayHello('Лаврентий');// LexicalEnvironment = {name: 'Лаврентий', magicNumber: 42}
var otherName = 'Ivan'; // window.otherName = Ivanfunction sayHello(name) {let magicNumber = 42;console.log(`Hello, ${otherName}`);}sayHello('Лаврентий');// LexicalEnvironment = {name: 'Лаврентий', magicNumber: 42}// sayHello.[[Scope]] = window
стандарт
function sum(operand1) {return function(operand2) {console.log(operand1 + operand2);}}// const sum = a => b => a + blet plus3 = sum(3);plus3(6); // 9
 
Реактивное, событийно-ориентированное, агентно-ориентированное программирование и т.д.
Модуль — функционально законченный фрагмент программы, оформленный в виде отдельного файла с исходным кодом… предназначенный для использования в других программах
(function () {let importedModule = window.importedModule;class AwesomeClass {//...}window.exportedModule = AwesomeClass;})();
// main.jsimport AwesomeClass from './package.js'let awesome = new AwesomeClass();
// package.jsclass AwesomeClass {//...}export default AwesomeClass;
let data = {text: 'Текст элемента!'};let block = document.createElement('div');block.classList.add('block');let blockEl = document.createElement('div');blockEl.classList.add('block__el', 'block__el_mod');blockEl.textContent = data.textblock.appendChild(blockEl);
let data = {text: 'Текст элемента!'};let block = document.createElement('div');block.innerHTML = `<div class="block"><div class="block__el block__el_mod">${data.text}</div></div>`;block.appendChild(blockEl);
<div class="menu"><span class="title"><%-title%></span><ul><% items.forEach(function(item) { %><li><%-item%></li><% }); %></ul></div>
<fest:template xmlns:fest="http://fest.mail.ru"context_name="json"><div><h1>Epic Game</h1></div></fest:template>
;(function(){var x=Function('return this')();if(!x.fest)x.fest={};x.fest['fest']=function (__fest_context){"use strict";var __fest_self=this,__fest_buf="",__fest_chunks=[],__fest_chunk,__fest_attrs=[],__fest_select,__fest_if,__fest_iterator,__fest_to,__fest_fn,__fest_html="",__fest_blocks={},__fest_params,__fest_element,__fest_debug_file="",__fest_debug_line="",__fest_debug_block="",__fest_htmlchars=/[&<>"]/g,......return __fest_html+__fest_buf;} else {return __fest_buf;}}})();
<div class="block"><div data-bind="text: text" class="block__el block__el_mod"><-- some code --></div></div><input data-bind="value: name, valueUpdate: 'input'" />