Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #31 (permalink)  
Старый 04.06.2012, 18:29
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

продолжаю изучение по учебнику http://learn.javascript.ru и снова столкнулся с проблемой и вот в этой
http://learn.javascript.ru/using-closures
статье есть задача для самостоятельного решения вот задача
http://learn.javascript.ru/task/funk...trokovyj-bufer
и все ок задачу решил он не сложная но сначала все работало , а потом вместо результат начало возвращать содержимое тела функции
function makeBuffer() {
var buff = "";

  return function (param){
  if(!param)return buff;
   
    buff += param;
    
  }

}

var buffer = makeBuffer();

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

помогите понять почему так?
Ответить с цитированием
  #32 (permalink)  
Старый 04.06.2012, 18:35
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

function makeBuffer() {
var buff = "";
 
  return function (param){
  if(!param)return buff;
    
    buff += param;
     
  }
 
}
 
var buffer = makeBuffer();
 
// добавить значения к буферу
buffer('Замыкания');
buffer(' Использовать');
buffer(' Нужно!');
// получить текущее значение
alert(buffer*!*()*/!*);
Ответить с цитированием
  #33 (permalink)  
Старый 04.06.2012, 18:42
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Раед Посмотреть сообщение
function makeBuffer() {
var buff = "";
 
  return function (param){
  if(!param)return buff;
    
    buff += param;
     
  }
 
}
 
var buffer = makeBuffer();
 
// добавить значения к буферу
buffer('Замыкания');
buffer(' Использовать');
buffer(' Нужно!');
// получить текущее значение
alert(buffer*!*()*/!*);
ой протупил, пасиб
Ответить с цитированием
  #34 (permalink)  
Старый 04.06.2012, 18:50
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

и еще маленький вопрос
зачем в это коде
function summ (a)
      {
      var summa = a ;
      
        function f(b){
  	  summa += b;    
      return f;
        };
        f.toString = function() { return summa; };
       return f; 
      };
   alert(summ (5)(3)(-8))

строчка
f.toString = function() { return summa; };

и когда он срабатывает?
Ответить с цитированием
  #35 (permalink)  
Старый 04.06.2012, 18:56
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Метод toString вызывается автоматически, когда необходимо привести объект к строке.
В данном случае alert(summ (5)(3)(-8)) - это сокращённая запись alert(summ (5)(3)(-8).toString())
Ответить с цитированием
  #36 (permalink)  
Старый 04.06.2012, 19:04
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Раед Посмотреть сообщение
Метод toString вызывается автоматически, когда необходимо привести объект к строке.
В данном случае alert(summ (5)(3)(-8)) - это сокращённая запись alert(summ (5)(3)(-8).toString())
Ответить с цитированием
  #37 (permalink)  
Старый 06.06.2012, 19:25
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

дошел до последней главы функций и на удивление благодаря вашим подсказкам много нового узнал=)
но возник вопрос по последнему уроку Декораторы
http://learn.javascript.ru/decorators
вот к примеру есть код
function work(a) { 
  /* ... */ // work - произвольная функция, один аргумент
}

function makeLogging(f, log) {

  return function (a){
  
 log.push(a);
  f.call(null,a);  
  
  }

}

var log = [];
work = makeLogging(work, log);

work(1); // 1, добавлено в log
work(5); // 5, добавлено в log

for(var i=0; i<log.length; i++) {
  alert( 'Лог:' + log[i] ); // "Лог:1", затем "Лог:5"
}

в общем код просто но вот чего не могу понять
return function (a){
  
 log.push(a);// это понятно добавление в массив лог
   return f.call(null,a);  // но смысел от этой сточки? и без нее работает
  
  }

вот код решение задачи из учебника (выше это мое ришение)
function work(a) { 
  /*...*/ // work - произвольная функция, один аргумент
}

function makeLogging(f, log) {

function wrapper(a) {
    log.push(a);
    return f.call(this, a);   
  }

  return wrapper;
}

var log = [];
work = makeLogging(work, log);

work(1); // 1
work(5); // 5

for(var i=0; i<log.length; i++) {
  alert( 'Лог:' + log[i] ); // "Лог:1", затем "Лог:5"
}
Ответить с цитированием
  #38 (permalink)  
Старый 06.06.2012, 19:34
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Сообщение от cyber
return f.call(null,a); // но смысел от этой сточки? и без нее работает
Ну дык она же функцию вызывает. Без неё весь смысл декораторов теряется.
Ответить с цитированием
  #39 (permalink)  
Старый 06.06.2012, 19:40
Аватар для cyber
I am Student
Отправить личное сообщение для cyber Посмотреть профиль Найти все сообщения от cyber
 
Регистрация: 17.12.2011
Сообщений: 4,415

Сообщение от Раед Посмотреть сообщение
Ну дык она же функцию вызывает. Без неё весь смысл декораторов теряется.
не ну это я понимаю
но в данном примере нет смысла от нее так как функция пустая?=)
Ответить с цитированием
  #40 (permalink)  
Старый 06.06.2012, 19:58
Аватар для Раед
''
Отправить личное сообщение для Раед Посмотреть профиль Найти все сообщения от Раед
 
Регистрация: 11.12.2011
Сообщений: 636

Сообщение от cyber
но в данном примере
Вот именно, это всего лишь пример и функция может быть любой
Сообщение от cyber
work - произвольная функция
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите понять поведение скрипта demoniqus Общие вопросы Javascript 3 02.03.2012 09:58
помогите понять jquery Xaver jQuery 0 13.04.2011 13:25
Анимация. Помогите понять почему не работает. kadurban jQuery 4 08.07.2010 20:50
Помогите понять куда копать warobushek Общие вопросы Javascript 10 13.05.2010 19:25
Помогите понять что надо "Удобное дерево" Fridrih AJAX и COMET 2 02.04.2010 10:12