Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 28.09.2012, 15:01
Аспирант
Отправить личное сообщение для xfreewindx Посмотреть профиль Найти все сообщения от xfreewindx
 
Регистрация: 19.08.2012
Сообщений: 33

пример с замыканием
Здравствуйте!
Вкуриваю пример про строковый буфер.
function makeBuffer() {
  var text = ''; 
    
  return function(piece) {
    if (piece === undefined) {
      return text;
    }
    text += piece; 
  };
};

var buffer = makeBuffer();

// добавить значения к буферу
buffer('Замыкания'); 
buffer(' Использовать'); 
buffer(' Нужно!'); 
alert( buffer() ); // 'Замыкания Использовать Нужно!'

var buffer2 = makeBuffer();
buffer2(0); buffer2(1); buffer2(0);

alert( buffer2() ); // '010'


Поясните два момента
1. почему мы присваиваем var buffer = makeBuffer();
почему нельзя просто вызывать makeBuffer('параметр'), не используя переменную buffer.
2. как передается параметр в функцию?
функция объявлена без параметра function makeBuffer() в скобках пусто,
а вызов идет с параметром buffer('Замыкания');
Пробовал вызвать makeBuffer('значение') не работает.
Ответить с цитированием
  #2 (permalink)  
Старый 28.09.2012, 15:09
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

function a(){
return function(){ return 1 }
}
alert(typeof a());
alert(a()());
__________________
.

Последний раз редактировалось Skipp, 28.09.2012 в 15:25.
Ответить с цитированием
  #3 (permalink)  
Старый 28.09.2012, 15:23
Аспирант
Отправить личное сообщение для xfreewindx Посмотреть профиль Найти все сообщения от xfreewindx
 
Регистрация: 19.08.2012
Сообщений: 33

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

Последний раз редактировалось xfreewindx, 28.09.2012 в 15:26.
Ответить с цитированием
  #4 (permalink)  
Старый 28.09.2012, 15:33
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Пару дней назад задавал этот же вопрос

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

И если такого вызова нет, то внутренняя часть функции остается недоступной.
Вот эта строчка:
var buffer = makeBuffer();

сбивала с толку
Это присвоение результата выполнения функции makeBuffer(), а не присвоение функции makeBuffer().
Ответить с цитированием
  #5 (permalink)  
Старый 28.09.2012, 15:37
Аватар для Skipp
.
Отправить личное сообщение для Skipp Посмотреть профиль Найти все сообщения от Skipp
 
Регистрация: 30.03.2010
Сообщений: 1,813

Сообщение от dmitry111
Это присвоение результата выполнения функции makeBuffer(), а не присвоение функции makeBuffer().
Что-то я не припомню не один язык где таким образом присваивалась бы функция, а не возвращаемое значение
Если бы было бы вот так:
var buffer = makeBuffer;
__________________
.
Ответить с цитированием
  #6 (permalink)  
Старый 28.09.2012, 15:40
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Сообщение от Skipp Посмотреть сообщение
Что-то я не припомню не один язык где таким образом присваивалась бы функция, а не возвращаемое значение
Если бы было бы вот так:
var buffer = makeBuffer;
не, ну я еще зеленый совсем
Ответить с цитированием
  #7 (permalink)  
Старый 28.09.2012, 16:58
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

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

а так бы тоже - не припомнил бы (
Ответить с цитированием
  #8 (permalink)  
Старый 28.09.2012, 17:00
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

А где практически можно было бы использовать замыкание?
Может есть у кого примеры?
Выложите пжалуйста
Ответить с цитированием
  #9 (permalink)  
Старый 28.09.2012, 17:52
Аватар для dmitry111
Профессор
Отправить личное сообщение для dmitry111 Посмотреть профиль Найти все сообщения от dmitry111
 
Регистрация: 26.03.2012
Сообщений: 823

Сообщение от Maxmaxmахimus Посмотреть сообщение
ОП чем тебе не пример?
ну да, неплохой пример..
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сделать пример кода диалог-окна sovka Работа 2 09.09.2012 22:23
Пример кода сохранения в базу html страницы генерированного посредством JavaScripts wayzer Серверные языки и технологии 2 06.09.2012 16:46
Пример идеального ядра большой системы vissarion Библиотеки/Тулкиты/Фреймворки 0 27.12.2010 14:45
Пример из книги Ajax на практике Sadd AJAX и COMET 5 10.04.2010 18:20
Не работает пример использования AJAX nuker AJAX и COMET 4 19.03.2009 18:31