Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 20.11.2018, 17:34
Интересующийся
Отправить личное сообщение для TheOwl Посмотреть профиль Найти все сообщения от TheOwl
 
Регистрация: 20.11.2018
Сообщений: 15

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


а этот нет, вопрос заключается в том, что говорилось, что методы функции доступны отовсюду, но не в последнем примере, почему так.?
объясните пожалуйста.
Ответить с цитированием
  #2 (permalink)  
Старый 20.11.2018, 18:16
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

А этот работает
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
Ответить с цитированием
  #3 (permalink)  
Старый 20.11.2018, 18:24
Интересующийся
Отправить личное сообщение для TheOwl Посмотреть профиль Найти все сообщения от TheOwl
 
Регистрация: 20.11.2018
Сообщений: 15

я понял. Тогда вопрос, у функции во втором примере есть метод clear, если есть то можно ли к нему обратиться?
Ответить с цитированием
  #4 (permalink)  
Старый 20.11.2018, 18:38
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

TheOwl,
return возвращает что-то из функции и завершает ее работу. то есть следующая строка уже не выполняется.
поэтому нет никаких buf.clear
Ответить с цитированием
  #5 (permalink)  
Старый 20.11.2018, 18:44
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

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


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


TheOwl,
почему в первом случае не появляется alert?
Ответить с цитированием
  #6 (permalink)  
Старый 20.11.2018, 19:49
Интересующийся
Отправить личное сообщение для TheOwl Посмотреть профиль Найти все сообщения от TheOwl
 
Регистрация: 20.11.2018
Сообщений: 15

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



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AddEventListener не правильно работает с классами Flakky Events/DOM/Window 2 27.05.2016 13:51
Метод duration() для <video> некорректно работает в Опере Zachary Opera, Safari и др. 0 10.08.2012 12:15
не работает метод offset() jQuery cyber Events/DOM/Window 3 06.08.2012 19:39
метод save объекта XMLDocument не работает pushkin Events/DOM/Window 0 21.01.2011 09:11
В Firefox 3.5.5 не работает метод POST. Какие методы лечения? javascript_pupil AJAX и COMET 1 10.12.2009 20:34