Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   про использование функций внутри функций (https://javascript.ru/forum/misc/50744-pro-ispolzovanie-funkcijj-vnutri-funkcijj.html)

javascriptus-maximus-∆ 09.10.2014 14:53

про использование функций внутри функций
 
  • вопрос широкий теоретический о программировании ваще, и на жаваскрипте в часности
  • ограничимся структурным ооп методом программирвоания и не будем упоминать js-замыкания
  • так функции используются как подпрограммы или как обработчики данных
  • подпрограммы вызываются из основного потока исполнения программы
  • и встраиваются последовательно в этот основной поток
  • вопрос - зачем может понадобиться определять функцию внутри функции?
    привидите пример эффективности и приимущества такого кода
  • то есть вызывается подпрограмма которая в своей работе использует подпрограммы определенные в своем же теле - разве это не бессмыслица?
  • некоторые языки например с++ запрещают это делать

XelaNimed 09.10.2014 21:05

Здравствуйте.
Это называется область видимости и используется очень часто и не только в JavaScript. Исходя из Ваших вопросов советую Вам не перепрыгивать основы, а внимательно и вдумчиво полистать на досуге.

kostyanet 09.10.2014 21:10

Цитата:

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

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

Похоже у читателя модель программирования тянется с перфокарт.

kostyanet 09.10.2014 21:56

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

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. :)

bes 09.10.2014 23:45

Цитата:

Сообщение от javascriptus-maximus-∆
вопрос - зачем может понадобиться определять функцию внутри функции?

зачем мозг внутри черепа, а не снаружи?

MallSerg 10.10.2014 00:46

это толстый вброс )

edison 10.10.2014 01:47

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

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);
	}
}


Часовой пояс GMT +3, время: 10:45.