продолжаю изучение по учебнику 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, время: 06:01. |