метод функции не работает отовсюду
<script>
function makeBuffer() { var text = ''; function buf(piece) { if (arguments.length == 0) { // вызов без аргументов return text; } text += piece; }; buf.clear = function(){ text = ''; } return buf; }; var buffer = makeBuffer(); // добавить значения к буферу buffer('Замыкания'); buffer(' Использовать'); buffer.clear(); buffer(' Нужно!'); alert( buffer() ); // 'Замыкания Использовать Нужно!' </script> этот код работает <script> function makeBuffer() { var text = ''; return function buf(piece) { if (arguments.length == 0) { // вызов без аргументов return text; } text += piece; }; buf.clear = function(){ text = ''; } }; var buffer = makeBuffer(); // добавить значения к буферу buffer('Замыкания'); buffer(' Использовать'); buffer.clear(); buffer(' Нужно!'); alert( buffer() ); // 'Замыкания Использовать Нужно!' </script> а этот нет, вопрос заключается в том, что говорилось, что методы функции доступны отовсюду, но не в последнем примере, почему так.? объясните пожалуйста. |
А этот работает
function makeBuffer() { var text = ''; return function buf(piece) { buf.clear = function(){ text = ''; }; if (arguments.length == 0) { // вызов без аргументов return text; } text += piece; }; }; var buffer = makeBuffer(); // добавить значения к буферу buffer('Замыкания'); buffer(' Использовать'); buffer.clear(); buffer(' Нужно!'); alert( buffer() ); // 'Замыкания Использовать Нужно!' У вас во втором примере возвращается описание функции без метода clear |
я понял. Тогда вопрос, у функции во втором примере есть метод clear, если есть то можно ли к нему обратиться?
|
TheOwl,
return возвращает что-то из функции и завершает ее работу. то есть следующая строка уже не выполняется. поэтому нет никаких buf.clear |
(function(){ return true; alert(1); })(); (function(){ alert(1); return true; })(); TheOwl, почему в первом случае не появляется alert? |
Спасибо, все просто. Так долго пытался это понять, а про return забыл. ))
|
Часовой пояс GMT +3, время: 03:02. |