Comments 28
Параметры можно передавать с помощью анонимных функций:
window.addEventListener('load', function() { test("param"); }, false);
window.addEventListener('load', function() { test("param"); }, false);
+3
Хм. Типа, новая Америка?..
0
Спасибо, нужно будет попробовать под Оперу...
+1
UFO just landed and posted this here
UFO just landed and posted this here
Это назвается "замыкания", а лямбда-функции - это немного другое.
Учите теорию.
Учите теорию.
0
Не спорьте горячие финские парни - это таки называется closures, а реализуются они с помощью лямбда-исчисления (кто такие "лямбда-функции" мне и самому интересно было бы узнать).
+1
Не понял смысла этого действа.
Повесить несколько вызовов одной функции с разными параметрами не получится.
А если с одним и тем же, то почему просто не задать его жестко в самой функции?
Повесить несколько вызовов одной функции с разными параметрами не получится.
А если с одним и тем же, то почему просто не задать его жестко в самой функции?
0
Еще можно пользоваться apply (не факт що это оправдано но вроде работает практически везде (IE5+)):
function bindParameter(_func, _params)
{
return function()
{
_func.apply(this, _params)
};
}
0
Замыкания (closures, delegates) – это одна из основных фишек JavaScript. Без нее реализация часто возможна только с использованием глобальных переменных, что на самом деле будет тем же самым замыканием, только не вокруг одной переменной, а вокруг всех переменных window. ;)
Для чего применяется:
- создать ссылку на вызов функции с параметрами (переданными при создании замыкания)
- создать ссылку на вызов функции в контексте объекта
Я использую вот такую функцию для создания замыканий:
Столько всего наворочено только для удобства использования и оптимизации.
Самым простым вариантом будет такой:
На счет расточительства: как асемблерщик – асемблерщика я вас понимаю. Говорят, что из-за ООП программы на C++ медленнее программ на C в 10000 раз. Но ведь давно уже никто не говорит, что использовать ООП – расточительно. JavaScript сам по себе быстрый. Узкие места обычно кроются в его связке с DOM.
Для чего применяется:
- создать ссылку на вызов функции с параметрами (переданными при создании замыкания)
- создать ссылку на вызов функции в контексте объекта
Я использую вот такую функцию для создания замыканий:
/**
* Bind function to context
* @param {Object|HTMLElement} context
* @param {Function} fn
* @return {Function} function bound to context
*/
$.bind=function(context, fn /*args...*/)
{
if(typeof(context)=='function'){
var args=Array.prototype.slice.call(arguments,0)
args.unshift(null);
return $.bind.apply(this, args);
}
if(arguments.length==2){ // params on call
return function(){
fn.apply(context||null, arguments);
};
}else{ // params on create
var args=Array.prototype.slice.call(arguments,2);
return function(){
fn.apply(context||null, args.concat(Array.prototype.slice.call(arguments,0)));
};
}
};
Столько всего наворочено только для удобства использования и оптимизации.
Самым простым вариантом будет такой:
/// delegate bound params on create, if none params on call
function delegate(that, thatMethod /*args...*/)
{
if(arguments.length==2)
/// params on call
return function(){ return thatMethod.apply(that,arguments); };
/// params on create
var args=Array.prototype.slice.call(arguments,2);
return function(){ return thatMethod.apply(that,args); };
}
На счет расточительства: как асемблерщик – асемблерщика я вас понимаю. Говорят, что из-за ООП программы на C++ медленнее программ на C в 10000 раз. Но ведь давно уже никто не говорит, что использовать ООП – расточительно. JavaScript сам по себе быстрый. Узкие места обычно кроются в его связке с DOM.
0
Расточительность - ворочать кучи непонятного кода, там где можно обойтись двумя элегантными строчками.
+1
http://www.terrainformatica.com/?p=9
http://www.terrainformatica.com/?p=13
любопытно, что оттуда убрали мои замечания в коментариях. написано "2 Comments", а нет ни одного.
http://www.terrainformatica.com/?p=13
любопытно, что оттуда убрали мои замечания в коментариях. написано "2 Comments", а нет ни одного.
0
Кроме того, возможность оформления вызова функции с определенными параметрами в другой объект-функцию с возможностью передачи его дальше, это всего лишь один из многих и многих аспектов замыканий.
0
Еще стоит отметить следующие применения: псевдо-private члены класса, функции-генераторы.
что я еще забыл?
что я еще забыл?
0
Скорее перечислить то, что к ним не относится.
Даже вызов функции, определенной вне этой функции осуществляется с помощью замыкания.
Даже вызов функции, определенной вне этой функции осуществляется с помощью замыкания.
0
ну это я упоминал в первы строках моего коментария. Вопрос не в том, что замыкания неявно присутствуют везде, а в том, когда правильнее решать проблемы именно используя замыкания.
0
Sign up to leave a comment.
Передача параметров в обработчики событий JavaScript