Показать сообщение отдельно
  #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"
}
Ответить с цитированием