Параметры get запроса

Spread оператор (оператор расширения)

Что тут смущает, так это такое же троеточие , как и в  параметрах. Но называется уже по-другому, а именно  оператором. Его назначение почти противоположно вышеупомянутым остаточным параметрам. Вместо сбора нескольких значений в один массив, он позволяет расширить заданный массив (или другой итерируемый объект) в несколько значений. Давайте посмотрим на разнообразные способы его применения:

Вызовы функций

Давайте предположим, что у нас есть массив с тремя элементами и функция, которой нужно три параметра.

Как вы передадите три значения нашего массива, как три отдельных аргумента для функции ? Есть довольно наивный подход к этому делу:

Очевидно, что это не очень хороший подход, особенно с учетом большого количества параметров и работать он будет только если мы будем знать количество этих самых параметров заранее. Давайте попробуем что-нибудь другое. Перед появлением оператора расширения, вот такой подход использовался для вызова функции и передачи массива в виде раздельных параметров:

Первым параметром в  является то, что мы собираемся использовать, как . Вторым параметром тут будет массив, который мы хотим передать функции, как аргументы.

Но с оператором расширения вы можете достигнуть тех же результатов с помощью:

Обратите внимание, что этот метод работает с любым итерируемым объектом, а не только с массивами. Для примера, оператор расширения разделит строку на отдельные символы из которых состоит слово или предложение. Но об этом немного дальше

А еще это можно совмещать вместе с передачей отдельных параметров. В отличие от  параметров, вы можете применить несколько  операторов в одном вызове функции и им не обязательно быть последним элементом в переданных параметрах.

config

Эта команда позволяет указывать дополнительные настройки, обычно связанные с определенным продуктом, например Google Рекламой или Аналитикой.

 – это идентификатор, который однозначно определяет цель обращений, например ресурс Google Аналитики или аккаунт Google Рекламы.
 – одна или несколько пар «параметр-значение».

В этом примере показано, как настроить тег для отправки данных в аккаунт Google Рекламы:

Аналогичным образом команду можно использовать для Google Аналитики:

В примере ниже показано, как настроить тег, который передает в аккаунт Google Аналитики дополнительную информацию о настройках с помощью параметра со значением и параметра со значением .

HTTP Методы GET и POST

Два наиболее используемых метода HTTP: GET и POST.

Что такое HTTP?

Протокол HTTP предназначен для обеспечения связи между клиентами и серверами.

HTTP работает как протокол запроса-ответа между клиентом и сервером.

Веб-обозреватель может быть клиентом, а приложение на компьютере, на котором размещается веб-узел, может быть сервером.

Пример: клиент (обозреватель) отправляет HTTP-запрос на сервер; Затем сервер возвращает ответ клиенту. Ответ содержит сведения о состоянии запроса, а также может содержать запрошенное содержимое.

Два метода HTTP-запроса: Get и POST

Два часто используемых метода запроса-ответа между клиентом и сервером: Get и
POST.

  • GET — Запрашивает данные из указанного ресурса
  • POST — Отправка данных для обработки в указанный ресурс

Метод Get

Обратите внимание, что строка запроса (пары «имя-значение») отправляется в URL-адрес запроса GET:

/test/demo_form.php?name1=value1&name2=value2

Некоторые другие заметки о запросах GET:

  • GET запросы могут кэшироваться
  • GET запросы остаются в истории браузера
  • GET запросы могут быть закладками
  • GET запросы никогда не должны использоваться при работе с конфиденциальными данными
  • GET запросы имеют ограничения по длине
  • GET запросы должны использоваться только для извлечения данных

Метод POST

Обратите внимание, что строка запроса (пары «имя-значение») отправляется в теле HTTP-сообщения запроса POST:

POST /test/demo_form.php HTTP/1.1Host: html5css.runame1=value1&name2=value2

Некоторые другие примечания по запросам POST:

  • POST запросы никогда не кэшируются
  • Запросы POST не сохраняются в журнале обозревателя
  • Запросы POST не могут быть закладками
  • Запросы POST не имеют ограничений по длине данных

Сравнить GET vs. POST

В следующей таблице сравниваются два метода HTTP: Get и POST.

  GET POST
Кнопка возврата/перезагрузка Безвредны Данные будут повторно отправлены (браузер должен предупредить пользователя о том, что данные будут повторно отправлены)
Закладка Можно закладка Не может быть Закладка
Кэшированные Может кэшироваться Не кэшируется
Тип кодировки application/x-www-form-urlencoded application/x-www-form-urlencoded or multipart/form-data. Использование мног

HTTP-запрос методом GET.

Одним из способов, как можно отправить запрос по протоколу HTTP к серверу, является запрос методом GET. Этот метод является самым распространенным и запросы к серверу чаще всего происходят с его использованием.

Самый простой способ, как можно создать запрос методом GET- это набрать URL-адрес в адресную строку браузера.

Браузер передаст серверу примерно следующую информацию:

GET / HTTP/1.1Host: webgyry.infoUser-Agent: Mozilla/5.0 (Windows NT 6.1; rv:18.0) Gecko/20100101 Firefox/18.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3Accept-Encoding: gzip, deflateCookie: wp-settingsConnection: keep-alive

Запрос состоит из двух частей:

1. строка запроса (Request Line)

2. заголовки (Message Headers)

Обратите внимание, что GET запрос не имеет тела сообщения. Но, это не означает, что с его помощью мы не можем передать серверу никакую информацию

Это можно делать с помощью специальных GET параметров.

Чтобы добавить GET параметры к запросу, нужно в конце URL-адреса поставить знак «?» и после него начинать задавать их по следующему правилу:

имя_параметра1=значение_параметра1& имя_параметра2=значение_параметра2&…

Разделителем между параметрами служит знак «&».

К примеру, если мы хотим передать серверу два значения, имя пользователя и его возраст, то это можно сделать следующей строкой:

http://site.ru/page.php?name=dima&age=27

Когда выполнен данный запрос, данные попадают в так называемую переменную окружения QUERY_STRING, из которой их можно получить на сервере с помощью серверного языка веб-программирования.

Вот пример, как это можно сделать на PHP.

<?phpecho «Ваше имя: » . $_GET . «<br />»;echo «Ваш возраст: » . $_GET . «<br />»;?>

Конструкция $_GET позволяет выводить значение переданного параметра.

В результате выполнения этого кода в браузере выведется:

Ваше имя: dimaВаш возраст: 27

Кстати, переходя по какой-либо ссылке, которая оформлена в HTML вот так:

<a href=”link.php?name=dima”>Ссылка</a>

мы тоже выполняем запрос к серверу методом GET.

Promise

Для работы с Promise в JavaScript есть два способа:

— then/catch

— async/await

Начнем с then, этот метод предназначен для навешивая обработчиков на Promise. Для получения ответа требуется вызвать метод then два раза.

Пример:

В первом then происходит получение объекта Response. Данный объект хранит в себе состояние нашего запроса.

Пример:

В примере выше можно посмотреть на основные поля ответа. Запрос выполнился со статусом 200 и состоянием ok, что означает true. Это означает что запрос был выполнен успешно и никаких ошибок не возникло.

Чтобы получить тело ответа, нужно воспользоваться специальным методом Response, посмотрим на его методы:

response.json() — декодирует ответ в JSON

response.text() — декодирует ответ в текст

response.formData() — вернет ответ в виде FormData

response.arrayBuffer() — вернет ответ в виде ArrayBuffer

response.blob() – вернет ответ в виде Blob

Пример:

В нашем примере мы преобразуем ответ в JSON формат.  После вызова первого then и применения метода объекта Response, в результате мы получаем Promise, для обработки которого снова требуется вызвать метод then. Результатом последующего вызова then будет получение тела нашего запроса.

Кодирование

Существует стандарт RFC3986, который определяет список разрешённых и запрещённых символов в URL.

Запрещённые символы, например, нелатинские буквы и пробелы, должны быть закодированы – заменены соответствующими кодами UTF-8 с префиксом , например: (исторически сложилось так, что пробел в URL-адресе можно также кодировать символом , но это исключение).

К счастью, объекты делают всё это автоматически. Мы просто указываем параметры в обычном, незакодированном, виде, а затем конвертируем в строку:

Как видно, слово в пути URL-адреса и буква в параметре закодированы.

URL стал длиннее, так как каждая кириллическая буква представляется двумя байтами в кодировке UTF-8.

Раньше, до того как появились объекты , люди использовали для URL-адресов обычные строки.

Сейчас часто удобнее, но строки всё ещё можно использовать. Во многих случаях код с ними короче.

Однако, если мы используем строку, то надо самим позаботиться о кодировании специальных символов.

Для этого есть встроенные функции:

  • encodeURI – кодирует URL-адрес целиком.
  • decodeURI – декодирует URL-адрес целиком.
  • encodeURIComponent – кодирует компонент URL, например, параметр, хеш, имя пути и т.п.
  • decodeURIComponent – декодирует компонент URL.

Возникает естественный вопрос: «Какая разница между и ? Когда использовать одну и другую функцию?»

Это легко понять, если мы посмотрим на URL-адрес, разбитый на компоненты на рисунке выше:

Как мы видим, в URL-адресе разрешены символы , , , , .

…С другой стороны, если взглянуть на один компонент, например, URL-параметр, то в нём такие символы должны быть закодированы, чтобы не поломать форматирование.

  • кодирует только символы, полностью запрещённые в URL.
  • кодирует эти же символы плюс, в дополнение к ним, символы , , , , , , , , , и .

Так что для URL целиком можно использовать :

…А для параметров лучше будет взять :

Сравните с :

Как видим, функция не закодировала символ , который является разрешённым в составе полного URL-адреса.

Но внутри параметра поиска символ должен быть закодирован, в противном случае мы получим , что значит плюс непонятный параметр . Не то, что предполагалось.

Чтобы правильно вставить параметр поиска в строку URL, мы должны использовать для него только . Наиболее безопасно кодировать и имя, и значение, за исключением случаев, когда мы абсолютно уверены в том, что они содержат только разрешённые символы.

Разница в кодировании с

Классы и базируются на последней спецификации URI, описывающей устройство адресов: RFC3986, в то время как функции – на устаревшей версии стандарта RFC2396.

Различий мало, но они есть, например, по-разному кодируются адреса IPv6:

Как мы видим, функция заменила квадратные скобки , сделав адрес некорректным. Причина: URL-адреса IPv6 не существовали в момент создания стандарта RFC2396 (август 1998).

Тем не менее, такие случаи редки. По большей части функции работают хорошо.

EXPRESS, параметры запроса

Разберем подробнее объект Request, что он содержит и как с ним работать.

Вот основные свойства, которые вы, вероятно, будете использовать:

Свойство Описание
.app содержит ссылку на объект приложения Express
.baseUrl базовый путь, по которому приложение отвечает
.body содержит данные, представленные в теле запроса (должны быть проанализированы и заполнены вручную, прежде чем вы сможете получить к ним доступ)
.cookies содержит данные cookie, отправленные по запросу (требуется промежуточная программная обработка cookie-parser)
.hostname название сервера
.ip IP сервера
.method используемый HTTP метод
.params параметры запроса в роуте
.path URL путь
.protocol протокол запроса
.query объект, содержащий все параметры запроса
.secure true если запрос безопасен (использует HTTPS)
.signedCookies содержит данные cookie, отправленные запросом (требуется промежуточная программная обработка cookie-parser)
.xhr true если запрос отправлен с помощью XMLHttpRequest

Как получить GET параметры запроса с использованием express

Пример строки запроса:

?name=flavio&age=35

Как нам получить эти значения из строки запроса в Express?

Express делает это очень просто, заполняя объект Request.query для нас:

const express = require('express')
const app = express()

app.get('/', (req, res) => {
  console.log(req.query)
})

app.listen(8080)

Этот объект заполнен значениями для каждого параметра запроса. Если в запросе не было  параметров, данный объект будет пустым.

Мы можем перебрать этот объект использовав цикл for… in:

for (const key in req.query) {
  console.log(key, req.query)
}

Пример выше распечатает в консоли ключи и значения содержащиеся в объекте.

Вы также можете получить доступ к отдельным свойствам:

req.query.name //flavio
req.query.age //35

Как получить post query string параметры с использованием express

Параметры запроса POST отправляются клиентами HTTP, например, с помощью форм или при выполнении данных отправки запроса POST.

Как вы можете получить доступ к этим данным?

Если данные были отправлены в формате JSON с использованием , вы  можете использовать парсер express.json():

const express = require('express')
const app = express()

app.use(express.json())

Если данные были отправлены как JSON с использованием Content-Type: application / x-www-form-urlencoded, вы будете использовать промежуточное программное обеспечение express.urlencoded ():

const express = require('express')
const app = express()

app.use(express.urlencoded())

В обоих случаях вы можете получить доступ к данным, ссылаясь на них из Request.body:

app.post('/form', (req, res) => {
  const name = req.body.name
})

Параметры, которые можно вызвать функцией

При вызове function ей можно отправить данные для обработки. Например, нижеследующий код выведет 2 сообщения:

 function showMessage(from, text) { // параметры from, text
 from = "** " + from + " **"; // здесь вставляем сложный код оформления
 alert(from + ': ' + text);
}
showMessage('Петя', 'Привет!');
showMessage('Петя', 'Как дела?');

Помните, что когда код будет передан, параметры скопируются в локальные переменные. Также функцию можно вызвать практически с любым количеством аргументов, а если при вызове параметр не будет передан, он считается равным undefined. К примеру, функцию отображения сообщений showMessage(from, text) можно без проблем вызвать, используя один аргумент:

showMessage("Петя");

Конвертируем итерируемые в массив при помощи Spread

Тут все это очень легко делается при помощи оператора расширения. Зачастую итерируемые объекты ограничены в выборе доступных для них методов. Но конвертируя их в массив, вы сразу же получаете доступ ко ВСЕМ прекрасным методам, доступным для массивов, таким как , , .

Уже готовые итерируемые

В JavaScript у нас есть несколько уже готовых итерируемых объектов, которые мы можем конвертировать в массив при помощи :

Строки

Массивы

Map

Set

Есть ещё один, но мы о нем пока не будем говорить это — .

Так в чем разница?

Разница в определении.

 работает для:

Массивоподобных объектов (объекты с свойством длины и индексированными элементами)

Итерируемых объектов

 работает только для:

Итерируемых объектов

Итак, давайте посмотрим на этот массивоподобный объект:

Тут мы получаем ошибку о том, что  не является итерируемым.

set

Позволяет задавать значения, которые сохраняются во всех последующих вызовах на странице.

 – название ключа и значение, которое сохраняется во всех вызовах . В этом примере параметру передается значение , а параметру  – . Эти значения будут использоваться во всех последующих событиях на странице.

Использование команды отличается от передачи значений непосредственно команде . В последнем случае значения, передаваемые в команду , применяются только в вызываемом событии. Когда используется команда , значения сохраняются на текущей странице и передаются во все последующие события. Сравните следующие примеры:

и

В первом примере событие будет передаваться со значением параметра , равным , а событие  – без параметров. Во втором примере оба события и будут передаваться с параметром , для которого задано значение .

Элементы кода, которые будут использованы в примерах.

XMLHttpRequest, — это класс, для работы AJAX.

request – это переменная или константа в которой будет хранится, — экземпляр класса XMLHttpRequest, объект с набором методов.

url – это путь до файла на сервере, который будет обрабатывать наш запрос. В примерах с GET методом, в нем будут передаваться данные со стороны клиента.

.open() – это метод где мы задаем, первым параметром, — метод передачи данных, а вторым url.

.setRequestHeader() – это метод для указания передаваемых заголовков, здесь мы можем указать что данные идут в url либо закрытым способом, либо хотим получить данные от сервера в json формате.

.send() – это последний этап создания http запроса. С помощью него также можно передать тело запроса т.е. данные от браузера к серверу. Можно не чего не передавать или прямо указать null.

onreadystatechange – это событие, которое случится, когда нам придет ответ от сервера.

readyState – это метод экземпляра, который сообщает статус HTTP-запроса, вот возможные значения, которые он может дать:

Значение Описание
    Метод open() не вызван
1     Метод open() вызван
2     Получены заголовки ответа
3     Получено тело ответа
4     Передача ответа выполнена

status или statusText – возвращают статус http заголовков, нам нужен ответ 200. Хотя бывают и 404 или 500.

.responseText – данные, которые придут от сервера в виде строки.

.response – данные вернуться в json формате, тут как бы мы преобразуем сразу в объект, и дальше работаем уже как с объектом.

.text() – используется в запросе fetch, возвращает строку.

.json() – используется в запросе fetch, возвращает json обращенный в объект.

Рекурсивная функция javascript

Важно: В информатике и программировании, а, соответственно, и в javascript, рекурсия — это вызов функции из самой же функции, т.е. функция в функции. Бывают также косвенная или сложная рекурсия, когда функция вызывается не непосредственно из самой себя, а из вложенной в нее функции: например, функция вызывает функцию , а функция — функцию

Количество вложенных вызовов функции или процедуры называется глубиной рекурсии

Бывают также косвенная или сложная рекурсия, когда функция вызывается не непосредственно из самой себя, а из вложенной в нее функции: например, функция вызывает функцию , а функция — функцию . Количество вложенных вызовов функции или процедуры называется глубиной рекурсии.

Для организации рекурсии необходимо наличие нескольких условий:

  • начальное условие (известное значение для переменной, отправной момент рекурсии);
  • рекурсивное правило;
  • условие окончания рекурсии.

Рекурсия javascript рассмотрена ниже на примере возведения числа в степень.Для начала рассмотрим итерационный вариант возведения в степень, т.е. с использованием :

Пример: Используя функцию, необходимо вычислять возведение числа в степень. Выполнить задание, используя цикл

Показать решение:

1
2
3
4
5
6
7
8
let chislo,stepen;
function degree(chislo,stepen) { 
	for(let result = 1; stepen > ; stepen--) {
 		result *= chislo; 
	} 
return  result;
} 
document.write(degree(2,4)); // выводит 16

Пример: Выполнить возведение числа в степень через рекурсию. Оба значения запрашивать у пользователя. Выдавать результат в виде:

2 в степени 4 = 16

Решение: 

  • Объявите глобальные переменные для числа и степени и запросите их:
let chislo,stepen;
chislo = parseInt(prompt('число: '));
stepen = parseInt(prompt('степень: '));

Создайте функцию с двумя аргументами для числа и степени:

function degree(chislo,stepen) { 
}

Поскольку известно, что любое число в степени 0 равно единице, то сделаем это начальным условием. То есть если степень = 0, то функция возвращает 1:

function degree(chislo,stepen) { 
	if(stepen) { 
…
	} 
	return 1; // если степень равна нулю то возвращаем 1
}

Создадим рекуррентное правило: если степень не равна 0, то нужно число умножить на число в степени на единицу меньше (вызов функции со степенью на единицу меньше):

function degree(chislo,stepen) { 
	if(stepen) { 
		return chislo*degree(chislo,stepen-1); 
	} 
	return 1; 
}

Вызовите функцию, оформив вывод:

document.write(chislo,' в степени ', stepen, ' = ', degree(chislo,stepen));

Протестируйте результат в браузере.

Задание js4_11. Что выведет на экран следующий код?

1
2
3
4
5
6
7
8
function f(counter) {
  counter--;
  document.write(counter + "<br/>");
  if (counter != )
    f(counter);
  document.write(counter + "<br/>");
}
f(2);

Задание js4_12. Вычислить факториал числа с использованием рекурсии, беря за образец пример

Пример: Вычисление факториала числа итерационным методом с использованием :

Показать решение:

1
2
3
4
5
6
7
8
9
10
11
let m = 2;
x = factorial(m);
document.write(x);
function factorial(n){
 if(n <= 1) return 1;
 rezult = 2; // result - переменная для результата
 for (i = 3; i <=n; i++) {
	rezult = rezult*i;
 }
return result;
}

Вопросы для самоконтроля:

  1. Что такое рекурсия?
  2. Назовите основные условия организации рекурсии, как вы их понимаете?

Отправление запросов при помощи модуля request

В начале этого руководства мы установили четыре модуля, и одни из них – . Вместо выполнения запросов при помощи cURL вы могли бы создать новый файл со всеми данными и отправить их при помощи него. Я создам файл под названием post.js, благодаря которому будет создан новый пользователь при помощи отправления запроса по методу .

Мы можем запустить этот файл за счет выполнения команды в новом окне консоли, не останавливая сервер, и в результате получим тот же результат, как и при использовании cURL. Если при использовании cURL что-то не так, то модуль оказывается полезным, поскольку мы можем ознакомиться с ошибками, ответом и телом сообщения.

Создание запросов с Axios

С Axios можно использовать GET и POST как для того, чтобы получать данные с сервера, так и для того, чтобы отправлять их на него.

GET:

Axios включает в себя 1 обязательный параметр. Он также может принимать второй дополнительный параметр. Он использует данные в качестве простого запроса.

POST:

Axios возвращает Promise («обещание»). Если вы знакомы с обещаниями, то наверняка знаете, что одно обещание может работать с несколькими запросами. То же самое можно проделать с Axios – он тоже может «заниматься» несколькими запросами одновременно.

Axios поддерживает много других методов и опций.

Область видимости переменных. Javascript глобальные и локальные переменные в функции

Область видимости переменной — область кода, в котором переменная доступна для использования.

  1. Глобальные переменные — создаются на уровне сценария и сохраняются до конца сценария;— объявляются до описания javascript функции:
        let a = 1;
        function ...
        ...

— могут быть причиной сложно находимых ошибок;
Локальные переменные
— создаются внутри фрагментов кода и не видны извне;

        for (let i=1;i<5;i++){  // i - локальная
           ...
        }
         if (x<5) {
            let a=5; // a - локальная
         }

— явно объявляются в теле javascript функции;

        function findA(){  
           let a = 2*2 // a - локальная
        }

— аргументы (параметры) функции — всегда локальные переменные;
— лучше использовать локальные переменные, так как доступ к ним больше контролируется.

Задание js4_9. Дополните код согласно заданию:
Создать 2 переменные глобальной и локальной области видимости (то есть внутри функции ) с именами: , .
Переменной присвоить текст “Привет, ”, а — “Мир”. Используя переменные, выведите их значения дважды: в основной программе и в теле функции.

function func() {
 
}
func();

Область видимости переменных

Рассмотрим конкретные примеры области видимости переменных в javascript при использовании глобальных и локальных переменных.

  1. 1
    2
    3
    4
    5
    6
    7
    8
    
    let S = 2; // Глобальная переменная S
    function plRectangle(width, height){
    	let S = width * height;
    	return S // Локальная переменная S
    }
    z = plRectangle(2, 3);
    alert(z);
    alert(S);

    Пример: Значение равно 6, а значение осталось равным 2, то есть значению глобальной переменной, определенной во внешней программе

  2. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    function plRectangle(width, height)
    {
    	let s = width * height; // аргументы всегда локальны
    	width = width + 10; 
    	return s
    }
    width = 2;
    height = 3;
    z = plRectangle(width, height);
    alert(z);
    alert(width);

    Пример: Значение равно 6; значение переменной равно 2, то есть осталось без изменений

  3. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    let S = 2; // Глобальная переменная S
    function plRectangle(width, height)
    {
    	S = width * height;
    	// заменяем глобальную переменную:
    	return S // S - глобальная переменная (т.к. без определения var)
    }
    let z = plRectangle(2, 3);
    alert(z);
    alert(S);

    Пример: Значения и и равны 6; — глобальная переменная

  4. 1
    2
    3
    4
    5
    6
    7
    8
    
    function Plrectangle(width, height){
    	S = width * height; //глобальная переменная
    	return S
    }
    z = Plrectangle(2, 3);
    S=2; // изменяем глобальную переменную
    alert(z);
    alert (S);

    Пример: Значение равно 6, а значение равно 2, то есть значению измененной глобальной переменной, определенной во внешней программе

  5. 1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    function plRectangle(width, height)
    {
    let S = width * height;
    let x = 17;
    return S
    }
    z = plRectangle(2,3);
    alert(z);
    alert(x); // не определена во внешней программе
    alert (S); // не определена во внешней программе

    Пример: Значение равно 6; переменная во внешней программе не определена; переменная во внешней программе не определена

Задание js4_10. Что выведет на экран следующий код?

1
2
3
4
5
6
7
let variable = "Глобальная переменная";
function f() {
  let variable = "Локальная переменная";
  document.write(variable + "<br/>");
}
f();
document.write(variable);

Вопросы для самоконтроля:

  1. Какова разница между локальными и глобальными переменными?
  2. Зачем в программировании существует необходимость деления переменных на локальные и глобальные?
Рейтинг
( Пока оценок нет )
Editor
Editor/ автор статьи

Давно интересуюсь темой. Мне нравится писать о том, в чём разбираюсь.

Понравилась статья? Поделиться с друзьями:
Люкс-хост
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: