метод функции не работает отовсюду
<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, время: 16:34. |