Как стать автором
Обновить

Комментарии 20

Извините, но я ничерта не понял.
Объяснение никакое
совсем ничерта?
допустим, у нас очень полезная фукнция f1, которую надо вызвать с некоторыми аргументами, например, при onclick'е на какую-нибудь кнопку. так и пишем: node.onclick = function() { f1(1,2,3); } — через какое-то время эту же функцию с такими же аргументами надо запускать, например, при инициализации страницы. у нас будет дважды повторяться f1(1,2,3);.
далее надо будет заменить 1,2,3 на 1,2,3,4: меняем аргументы в двух местах, что не приятно.

можно же просто записать myCallback = _clb(f1, [1,2,3]);, прописать и на onclick, и на инициализацию myCallback.fire — когда потребуется изменить список аргументов, сделать это можно будет в одном месте.

и чем больше в скрипте колбеков, тем больше толку от использования.
Приучите себя пихать в функцию не кучу параметров, а объект параметров, это решит большинство проблем с совместимостью/расширяемостью.
то бишь, вместо нескольких аргументов один? ничего против не имею, но это дело вкуса.
но даже если аргумент всего один, то замыкания каждый раз все равно надо создавать — не удобно.
Вы о замыканиях когданибудь слышали?
оно и создается, только в одном месте (при создании объекта) независимо от кол-ва мест передачи колбека. плюс синтаксис много легче и читаемей.
function make_callback(a, b, c) {
	return function() {
		return a + b + c;
	}
}

callback = make_callback(2, 3, 5);

alert(callback());

Или я чего-то не понимаю?
все правильно, только меня return function() { запарило уже писать (как и инлайном function в скобки оборачивать)
var cb = function(fn, args, bind){
return function(){
return fn.apply(bind || window, args || []);
}
}

callback = cb(function(a){console.log(a)}, ['a']);
callback();
оно самое. если пойти дальше немного, то получится то, что написано в статье.
Можно передавать необходимые вещи аргументами. Но всё равно странная штука.
Почему изобретатели всевозможных мертворожденных комбайнов избирают своей целью именно JavaSсript?
кто что знает, тот то и избирает
я полагаю forgotten хотел сказать, что не надо извращать лаконичный и красивый javascript
Пардон, я тоже ничего не понял.

Вы изнасиловали функцию bind?

Function.prototype.bind = function(scope) {
var f = this;

return function() {
return f.apply(scope, arguments);
}
}

для варианта с аргументами

Function.prototype.bind = function(scope)
{
var f=this;
if(arguments.length==1) return function(){return f.apply(scope,arguments)};

var fnSlice=Array.prototype.slice,a=fnSlice.call(arguments,1);
return function(){return f.apply(scope,a.concat(fnSlice.call(arguments)))}
};
похоже на то :)
Статья 131 УК РФ. Изнасилование — от трех до шести лет.
С конфискацией орудия преступления
Демо бы… а то что же изучать чего у вас там, чтобы возможно в результате понять что оно и не нужно вообще ни разу)))
рядом с каждой строчкой результат закомментирован. и прямо над Вашим комментарием webdew указал куда более короткий листинг, пусть и с урезанными возможностями.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории