замыкания в javascript
Доброго времени суток.
Во многих учебниках и статьях я вижу пример по замыканиям следующего типа: var greeting = function(name) { return function() { console.log("Hello, " + name); } } greeting("Someone")(); // => "Hello, Someone" В чем преимущество этого решения и что это нам дает? мы же можем написать такой код и получается то же самое: var greet = function(name) { return console.log("Hello, " + name); } greet("SomeoneElse"); // => "Hello, SomeoneElse" |
Конкретно здесь - ни в чем. Тебе просто показали, как это работает.
|
Цитата:
Именно этот прием и демонстрируют... |
Понял, как всегда думал, что все намного сложнее.
Спасибо! |
Наверно все не так просто
небольшой пример в котором создается три разных указателя на одну и туже функцию
<!doctype html>
<html>
<head>
<meta charset="UTF-8">
<script type="text/javascript">
var f_1 = function(name){
return function() {
alert("alert, " + name);
}
};
// в переменных v_1,v_2,v_3 сохраняется указатель на функцию
var v_1 = f_1("Some1");
var v_2 = f_1("Some2");
var v_3 = f_1("Some3");
</script>
</head>
<body>
Вызов функции f_1( ); каждый раз создает отдельное замыкание<br>
т.к. в функции есть внутренняя функция «return function()» то создается замыкание<br>
т.е. каждый вызов «f_1 = function(name)» будет сохранять текущий скоп у замкнутой функции<br>
т.е. в каждом замыкании будет сохранятся(в скопе) параметр name<br>
пока сохраняется ссылка на внутреннюю функцию<br>
<input type="button" onclick="v_1()" value="первое замыкание" /><br>
<input type="button" onclick="v_2()" value="второе замыкание" /><br>
<input type="button" onclick="v_3()" value="первое замыкание" /><br>
</body>
</html>
|
так, хорошо. Здесь кажется разобрался.
У меня такой вопрос есть. Если написать такой код: var f_1 = function(name) { alert("alert, " + name); }; остальной js и html оставить неизменным. у меня при загрузке страницы выдает сразу три alert, хотя мы его повесили на событие. как так? =) этот вопрос наверное уже не относится к замыканиям, но все же. |
если сделать как вы сказали, тогда в строках:
var v_1 = f_1("Some1");
var v_2 = f_1("Some2");
var v_3 = f_1("Some3");
происходит происходит вызов трёх alert-ов, а самим переменнам присваеваеться значение undefined |
Цитата:
|
MallSerg, так написали, что непонятно сарказм это или нет
|
считайте, что того сообщения не было :D
|
Кложи в js юзают главным образом для callback'ов. Замыкание это самое хавает контекст и открывает короткий путь, синергизм с программированием событий выдвигает этот массив массивов (ну JS) в передовые технологии.
|
Цитата:
Кложа тупо выполняется там где родилась. Соответственно все что в том самом месте для нее доступно - оно и будет доступным в момент интерпретации текста функции. Цитата:
|
| Часовой пояс GMT +3, время: 01:59. |