Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   метод функции не работает отовсюду (https://javascript.ru/forum/misc/75964-metod-funkcii-ne-rabotaet-otovsyudu.html)

TheOwl 20.11.2018 17:34

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


а этот нет, вопрос заключается в том, что говорилось, что методы функции доступны отовсюду, но не в последнем примере, почему так.?
объясните пожалуйста.

Dilettante_Pro 20.11.2018 18:16

А этот работает
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

TheOwl 20.11.2018 18:24

я понял. Тогда вопрос, у функции во втором примере есть метод clear, если есть то можно ли к нему обратиться?

j0hnik 20.11.2018 18:38

TheOwl,
return возвращает что-то из функции и завершает ее работу. то есть следующая строка уже не выполняется.
поэтому нет никаких buf.clear

j0hnik 20.11.2018 18:44

(function(){
return true;
alert(1);
})();


(function(){
alert(1);
return true;
})();


TheOwl,
почему в первом случае не появляется alert?

TheOwl 20.11.2018 19:49

Спасибо, все просто. Так долго пытался это понять, а про return забыл. ))


Часовой пояс GMT +3, время: 03:02.