Функция как переменная в JavaScript
Итак, в предыдущем уроке мы с вами выяснили, что обратившись к функции без круглых скобок, мы получаем ее исходный код.
На самом деле все намного интереснее. В JavaScript, в отличие от других языков, функции являются такими же значениями переменных, как числа, строки и массивы.
Давайте посмотрим на примере. Пусть у нас есть, например, функция func :
function func() < console.log('!'); >
На самом деле у нас нет функции func . У нас есть переменная func , хранящая в себе исходный код функции.
Мы можем, к примеру, затереть переменную func чем-нибудь другим, например, строкой. В этом случае функция func больше не будет функцией, а будет строкой. Смотрите на примере:
function func() < console.log('!'); >func(); // выведет ‘!’ func = ‘string’; // затрем переменную func console.log(func); // выведет ‘string’
Сделайте функцию func , которая будет возвращать через return какую-либо строку.
Выведите результат работы функции func в консоль.
Выведите исходный код функции func в консоль.
Запишите в переменную func число 123 , тем самым затерев функцию из этой переменной. Выведите новое значение переменной func в консоль.
Передача переменных между функциями javascript
Например:
Вернуть переменную из одной функции, получить во второй:
function f1() < var trololo = 345; return trololo; >function f2()
Объявить вторую функцию внутри первой :
function f1() < var trololo = 345; function f2()< var myTrololo = trololo; >>
Использовать для связи какой-нибудь объект, к которому будут иметь доступ обе функции:
var GodObj = <>; function f1() < var trololo = 345; GodObj.lala = trololo; >function f2()
Собственно вызвать вторую функцию из первой, с некоторым обычно необязательным параметром, но конечно тут зависит от того что эта функция делает
function f1() < var trololo = 345; f2(trololo); >functin f2(trololo) < if(typeof(trololo)!='undefined') myTrololo = trololo;// Если такой параметр есть >
Как передать переменную из функции в другую, не вызывая ее в другой
Передать переменную из одной функции в другую, не вызывая саму функцию
И так есть 2 функции. В первую функцию func_1 передается перменная q она там как-то обрабатывается.
В main объявить переменную, потом в другой функции ее инициализировать, вызывая функцию scanf
Помогите разобраться с задачей. Нужно в main объявить переменную, потом в другой функции ее.
Как передать переменную из одной функции в другую?
суть вопроса заключается в том, каким образом я могу передать переменную которая хранит имя базы.
Как переменную из одной функции передать в другую?
у меня надо переменную index из функции maxi передать в функцию summa #include "stdafx.h".
![]()
6485 / 3896 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
Сообщение от deekep 
Как использовать значение id из функции two в функции three, не вызывая two в three
Объявить переменную не в two(), а в one().
Тогда она станет доступна всем вложенным функциям.
67 / 30 / 17
Регистрация: 07.10.2018
Сообщений: 378
amr-now, да, но структура должна быть именно такая и id получается конкретно в функции two
![]()
6485 / 3896 / 2005
Регистрация: 14.06.2018
Сообщений: 6,781
deekep, значение получайте.
А имя должно быть известно раньше вовне.
67 / 30 / 17
Регистрация: 07.10.2018
Сообщений: 378

Сообщение было отмечено amr-now как решение
Решение
amr-now, вы имеете в виду такую структуру?
1 2 3 4 5 6 7 8 9
function one(){ var id = 0; function two(){ id = . ; } function three(){ mess.channel.send(""+id); } }
Ее я тоже пробовал, в функции two нужное значение id присваивается, но за ее пределами остается 0;
3248 / 1159 / 391
Регистрация: 24.07.2016
Сообщений: 1,729
Сообщение от deekep 
Ее я тоже пробовал, в функции two нужное значение id присваивается, но за ее пределами остается 0;
Функцию two вам в любом случае необходимо вызвать, чтобы получить значение переменной id, независимо от того, будет ли эта переменная в глобальной области или в локальной, относительно two. В «локальном» случае, вам нужно вернуть результат вызова.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
function one() { let id = 0; function two() { id++; } two(); function three() { console.log(id); } three(); } one(); // 1 // или function one() { function two() { let id = 1; return id; } let id = two(); function three() { console.log(id); } three(); } one(); // 1
1115 / 762 / 194
Регистрация: 21.05.2016
Сообщений: 1,859
deekep, без вызова функции two() можно попробовать таким нехорошим способом:
1 2 3 4 5 6 7 8 9 10 11 12 13
function one() { function two() { id = 123456; } function three() { const searchValue = 'id = '; const funcBody = two.toString(); const id = funcBody.slice(funcBody.indexOf(searchValue) + searchValue.length - 1, funcBody.indexOf(";")).trim(); console.log(""+id); } three(); } one();
Регистрация: 20.02.2019
Сообщений: 128
Замыкание — возможно ваше решение.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
const funcClosure = () => { id = 'defaultValue'; return function (){ function two() { console.log('two: ', id); id = 'new value' } function three() { console.log('three: ', id); } two(); three(); } } const one = funcClosure(); one();
localStorage в javascript
Давайте рассмотрим подробнее. LocalStorage представляет собой своего рода ячейку памяти в которую мы можем записать чего-нибудь и этим дальше попользоваться. Т.е. это какая-то память, которую используем. Зачем они нужны? Я думаю, вы часто видели на сайтах возможность сохранять свои данные. Или Вас запоминает страничка и говорит. Запомнить Вас?
Итак, далее. В этом плане мы можем полностью рассчитывать на localStorage . Своего рода куки есть, которые в браузере хранятся и ими мы действительно можем пользоваться для таких целей, чтобы где-то запомнить нас и потом к тому, что запоминаем, уже обратиться. Т.е. это банально запись. Вот плюс localStorage в том, что мы можем записать на одной страничке данные, а на другой к этому обратиться. Итак, мы разберем, где нужен localStorage, как с ним работать и разберем все это дело на примере, и зачем они нужны. Поехали! Как мы можем их использовать и зачем они нам нужны мы уже поняли. Это всего-навсего ячейка памяти, куда мы чего-то записываем. А теперь давайте все это посмотрим на деле. Создадим первый файлик. Пусть это будет index.html. Дадим ему классическую структуру данных. Здесь запишем, что это localStorage. И здесь внутри сделаем что-нибудь интересное. Как мы можем записывать данные в localStorage. Если нам надо что-нибудь куда-нибудь записать определенно нам нужно будет работать с тегом script.
Давайте начнем все с построения плана:
Создадим переменную, имя пользователя.
Записать имя пользователя в localStorage.
Обратимся к записанной переменной на другой странице.
Это наш краткий план того , что мы будем делать. Что первое мы хотим сделать? Читаем, создать переменную, имя пользователя. Давайте создадим. В тегах script напишем переменную. Пусть будет var userName и назовем его Иван. Наша задача записывать в localStorage нашу переменную. Для записи в localStorage сначала к нему обратимся. Давайте напишем localStorage.setItem(‘ ’); LocalStorage всегда записывается в виде переменной ключа и значения. Всегда есть своего рода принцип. Сначала мы создадим имя переменной, а потом туда записываем то, что мы хотим записать. Точно также на деле происходит с localStorage. В начале говорим название ключа (нашу переменную), а потом в него пишем саму переменную.
Ну вот и поехали. Первым делом userName пусть будет, или myuser. Это будет ключ нашего localStorage. А в его значение мы запишем userName, который имеет значение Иван.
localStorage.setItem(‘myuser’,username);
Таким образом происходит запись. Т.е. мы сейчас выполнили первое действие записали переменную и имя пользователя. Второе действие, записать имя пользователя в localStorage мы тоже выполнили. И третий пункт нашего блокбастера — это обратиться к записанной переменной на другой страничке. Давайте обратимся пока на этой страничке к этой переменной, к нашей переменной localStorage. Как мы можем к ней обратиться? Давайте попробуем ее куда-то вывести. Пускай это будет у нас console.log. Но сейчас сделаем акцент, если хотим показать внутри нашей переменной что-то, обратиться не записывать, мы должны говорить не setItem, а getItem. Мы говорим. А ну-ка, выведите нам нашего пользователя, который тут есть, пользователя, которого мы тут у вас сохраняли. Это как раз даст возможность вывести. Поэтому здесь мы пишем, что это у нас вывод и выводим из localStorage нашего пользователя.
console.log(localStorage(‘myuser’));
Давайте попробуем посмотреть, а как же это у нас будет работать. Что скажет нам консоль?
localStorage пишется через букву S большую всегда. Еще раз проверяем. Видим, что у нас здесь звучит Иван. Т.е. мы записали в localStorage переменную, а потом ее вычитали. Отлично! По-моему все сработало. А как же нам посмотреть, что мы сделали на другой страничке. Я же заявил о том, что localStorage может помнить то, что у них записывается. Давайте сделаем ссылку на другую страничку. Пусть это у нас будет файл second.html.
Наша цель вывести localStorage на второй страничке. Скопируем:
console.log(localStorage.getItem(‘myuser’));
и выведем на другой странице, естественно, в тегах script. Вот вставляем, давайте посмотрим. Будет ли это работать? Т.е. сейчас , когда мы перейдем на другую страничку. На second. У нас внизу консоли должна, точно так же появиться наша переменная Иван. Поехали, мы переходим. По-моему, все видно. Т.е. вот мы явно находимся на другой странице. Здесь мы показываем в консоли это значение. Вот таким образом мы можем передавать данные с одной страницы на другую с помощью localStorage. Это та же кука, только элегантно обернута и которая нам дает возможность элегантно и красиво пользоваться ею. И чтобы уже более, как бы качественно, и более интересно попробовать это все дело закрепить, я предлагаю домашку.
Давайте попробуем домашку оформить и за одно вы ее выполните. Потому, что без практики у нас ничего не получится. Она будет сложней, нужно создать массив. Например пусть это будет массив товаров. Например мобильные телефоны. Нужно записать этот массив в localStorage. Но здесь есть подвох, в localStorage мы не можем записывать массивы напрямую.
Поэтому пишу, что массив нужно превратить в строку. Только после этого мы его должны записать. Следующий ход. Вывести этот массив на другой страничке в консоли, как мы это делали вместе. У нас должно быть так все реализовано и построено, чтобы мы в одном месте записали, т.е превратили в строку, перейдя на другую страницу мы уже могли этот массив разобрать. Вот вам основа передачи большего количества информации с помощью кук, которые записываются массивами. На следующей страничке мы должны распарсить наш массив и получить уже результат. Вот это будет основная наша цель.
Попробуйте это сделать — Должно обязательно получиться.
А если что-нибудь будет не так, то пишите, будем отвечать. Поможем разобраться. Все! Успехов! Вам счастливо!