замыкания в 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
|
Часовой пояс GMT +3, время: 15:16. |