продолжаю изучение по учебнику 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); помогите понять почему так? |
function makeBuffer() { var buff = ""; return function (param){ if(!param)return buff; buff += param; } } var buffer = makeBuffer(); // добавить значения к буферу buffer('Замыкания'); buffer(' Использовать'); buffer(' Нужно!'); // получить текущее значение alert(buffer*!*()*/!*); |
Цитата:
|
и еще маленький вопрос
зачем в это коде 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; }; и когда он срабатывает? |
Метод toString вызывается автоматически, когда необходимо привести объект к строке.
В данном случае alert(summ (5)(3)(-8)) - это сокращённая запись alert(summ (5)(3)(-8).toString()) |
Цитата:
|
дошел до последней главы функций и на удивление благодаря вашим подсказкам много нового узнал=)
но возник вопрос по последнему уроку Декораторы 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" } |
Цитата:
|
Цитата:
но в данном примере нет смысла от нее так как функция пустая?=) |
Цитата:
Цитата:
|
Часовой пояс GMT +3, время: 09:14. |