Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 09.10.2014, 14:53
Аватар для javascriptus-maximus-∆
Кандидат Javascript-наук
Отправить личное сообщение для javascriptus-maximus-∆ Посмотреть профиль Найти все сообщения от javascriptus-maximus-∆
 
Регистрация: 07.07.2014
Сообщений: 103

про использование функций внутри функций
  • вопрос широкий теоретический о программировании ваще, и на жаваскрипте в часности
  • ограничимся структурным ооп методом программирвоания и не будем упоминать js-замыкания
  • так функции используются как подпрограммы или как обработчики данных
  • подпрограммы вызываются из основного потока исполнения программы
  • и встраиваются последовательно в этот основной поток
  • вопрос - зачем может понадобиться определять функцию внутри функции?
    привидите пример эффективности и приимущества такого кода
  • то есть вызывается подпрограмма которая в своей работе использует подпрограммы определенные в своем же теле - разве это не бессмыслица?
  • некоторые языки например с++ запрещают это делать
Ответить с цитированием
  #2 (permalink)  
Старый 09.10.2014, 21:05
Аватар для XelaNimed
Интересующийся
Отправить личное сообщение для XelaNimed Посмотреть профиль Найти все сообщения от XelaNimed
 
Регистрация: 07.02.2010
Сообщений: 23

Здравствуйте.
Это называется область видимости и используется очень часто и не только в JavaScript. Исходя из Ваших вопросов советую Вам не перепрыгивать основы, а внимательно и вдумчиво полистать на досуге.
Ответить с цитированием
  #3 (permalink)  
Старый 09.10.2014, 21:10
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

Сообщение от javascriptus-maximus-∆
подпрограммы вызываются из основного потока исполнения программы
и встраиваются последовательно в этот основной поток
Все блин по полочкам надо разложить и ходить пыль стирать: ах какая красота, все ясно и понятно.

Похоже у читателя модель программирования тянется с перфокарт.
Ответить с цитированием
  #4 (permalink)  
Старый 09.10.2014, 21:56
Профессор
Отправить личное сообщение для kostyanet Посмотреть профиль Найти все сообщения от kostyanet
 
Регистрация: 23.10.2010
Сообщений: 2,718

С вики, главная фича, цитата:

Functions are first-class; they are objects themselves. As such, they have properties and methods, such as .call() and .bind().[35] A nested function is a function defined within another function. It is created each time the outer function is invoked. In addition, each created function forms a lexical closure: the lexical scope of the outer function, including any constants, local variables and argument values, becomes part of the internal state of each inner function object, even after execution of the outer function concludes.[36]

Конец цитаты.

Динамическая видимость не чудо

http://en.wikipedia.org/wiki/Scope_%...Function_scope

но вот у js она сохраняется даже после смерти вызывающей функции.

Потому что js интепретатор - ходит бродит по своему массиву смотря что где ассоциировано и если там нассоциировали, то значит оно и берется из данных в то время как текст функции реюзается как текст - интепретируется. Но данные-то уже поменялись - все вот и сшивается. Примерно, конечно.

JS это []{}. Массив объектов.

И в контексте применения в браузерах - это колбэки без которых ничего толком не сделаешь.

У меня с полсотни скриптов на WScript - кто-нить хоть один в жизни такой написал вообще? - и все они унылое гавно чуть более чем полностью. Там же нет ни событий толковых, ни интерфейса глюкавого, но все-таки интерфейса браузера и хтмл - ничего нет. Вот там колбеки нафиг не нужны и там включаешь функцию в функцию чисто чтобы на виду была.

Кстати попутно вычитал что первым именем JavaScript была Mocha. А я думал Gavno.
Ответить с цитированием
  #5 (permalink)  
Старый 09.10.2014, 23:45
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от javascriptus-maximus-∆
вопрос - зачем может понадобиться определять функцию внутри функции?
зачем мозг внутри черепа, а не снаружи?
Ответить с цитированием
  #6 (permalink)  
Старый 10.10.2014, 00:46
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,126

это толстый вброс )
Ответить с цитированием
  #7 (permalink)  
Старый 10.10.2014, 01:47
Аспирант
Отправить личное сообщение для edison Посмотреть профиль Найти все сообщения от edison
 
Регистрация: 01.04.2013
Сообщений: 58

Я мозг сломал пока читал....

function test(t,s){
	var func;
	if(t)func=function(a,b){return a+b};
	else func=function(a,b){return a-b};
	for(var i=0;i<100000000;i++){
		func(s,i);
	}
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вызов локальной функций внутри переменной gibigate Общие вопросы Javascript 1 20.03.2013 14:47
Про использование cookies zloctb Общие вопросы Javascript 3 11.02.2012 09:36
Использование $(this) внутри функции Dorian_bs Общие вопросы Javascript 6 21.11.2011 11:10