Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.01.2010, 16:08
Аватар для Niar
Труъ кодер
Отправить личное сообщение для Niar Посмотреть профиль Найти все сообщения от Niar
 
Регистрация: 20.01.2010
Сообщений: 194

Альтернатива return с меткой
Чтобы выйти из цикла можно использовать break
for(){
break;
}

В функции можно использовать return без выражения справа.
function func(){
return;
}

Чтобы во вложенном цикле выйти из внешнего можно использовать break с меткой
firstfor:
for(){
for(){
break firstfor;
}
}

Вопрос как из вложенной функции завершить внешнюю
function func1(){
functiob func2(){
//Что-то завершающие func1
}
}
__________________
http://www.free-lance.ru/users/Nia173 Мой аккуант на free-lance.
Ответить с цитированием
  #2 (permalink)  
Старый 26.01.2010, 16:38
Аватар для PeaceCoder
Профессор
Отправить личное сообщение для PeaceCoder Посмотреть профиль Найти все сообщения от PeaceCoder
 
Регистрация: 15.12.2009
Сообщений: 742

function func1(){
  try{
    function func2(){
      //Что-то завершающие
      throw 'exit';
      }
    продолжение func1;
    }catch(e){if e!=='exit' throw e}
  }


Но оно гораздо медленее ретурнов. Легче сделать ретурн с опред значением и его на выходе проверять.
try catch vs. returns кто быстрее ?

Последний раз редактировалось PeaceCoder, 26.01.2010 в 16:43.
Ответить с цитированием
  #3 (permalink)  
Старый 26.01.2010, 16:40
Аватар для Niar
Труъ кодер
Отправить личное сообщение для Niar Посмотреть профиль Найти все сообщения от Niar
 
Регистрация: 20.01.2010
Сообщений: 194

Спасибо
Поставил +
__________________
http://www.free-lance.ru/users/Nia173 Мой аккуант на free-lance.
Ответить с цитированием
  #4 (permalink)  
Старый 28.01.2010, 09:58
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от Niar
Вопрос как из вложенной функции завершить внешнюю
не надо этого хотеть (c)
Ответить с цитированием
  #5 (permalink)  
Старый 28.01.2010, 12:40
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от x-yuri
не надо этого хотеть (c)
Ну, почему? Возможны варианты, когда из фунарга удобно завершить и саму функцию (например, в Ruby для таких случаев предусмотрены две конструкции): http://javascript.ru/blog/Dmitry-A.-...unarg-i-return
__________________
Тонкости ECMAScript
Ответить с цитированием
  #6 (permalink)  
Старый 28.01.2010, 13:17
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

хорошо, а можно практический пример?
Ответить с цитированием
  #7 (permalink)  
Старый 28.01.2010, 13:50
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от x-yuri
хорошо, а можно практический пример?
Там же в статье был:


function getElement() {
  [1, 2, 3].forEach(function (element) {
    if (element % 2 == 0) {
      // возврат в функционал - .forEach,
      // но не выход из getElement
      alert('found: ' + element); // found: 2
      return element;
    }
  });
  return null;
}
alert(getElement()); // null, а не 2
__________________
Тонкости ECMAScript
Ответить с цитированием
  #8 (permalink)  
Старый 29.01.2010, 09:58
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

ну так здесь нету никакого завершения внешней функции из вложенной.
Ответить с цитированием
  #9 (permalink)  
Старый 29.01.2010, 10:21
Новичок на форуме
Отправить личное сообщение для Kolyaj Посмотреть профиль Найти все сообщения от Kolyaj
 
Регистрация: 19.02.2008
Сообщений: 9,177

Dmitry A. Soshnikov,
че-та я тоже пример не понял.

Сообщение от Dmitry A. Soshnikov
null, а не 2
А почему должен быть 2?
Ответить с цитированием
  #10 (permalink)  
Старый 29.01.2010, 13:03
Профессор
Отправить личное сообщение для Dmitry A. Soshnikov Посмотреть профиль Найти все сообщения от Dmitry A. Soshnikov
 
Регистрация: 25.02.2008
Сообщений: 707

Сообщение от x-yuri
ну так здесь нету никакого завершения внешней функции из вложенной.
Зависит от реализаций, в данном случае читай - завершение функции getElement из двойного вложения: метода .forEach и функции-аргумента. В ES такое невозможно. В других языка (например, Smalltak) - возможно.

Сообщение от Kolyaj
Dmitry A. Soshnikov,
че-та я тоже пример не понял.
А почему должен быть 2?
Нет, не должен, конечно. Для ES должен быть, правильно, null. Но вопрос в том, что иногда это может быть удобно, и, что в других языках предусмотрены для этого конструкции.

Вот этот раздел: http://en.wikipedia.org/wiki/Closure...in_sema ntics (там пониже как раз примеры на Ruby с разными вариациями return-a приводится)

Но речь идёт только о возможном завершении стека вызова (когда контексты существуют); и в Ruby можно сделать ошибку return-a, когда он не сможет определить, в какой контекст возвращать.
__________________
Тонкости ECMAScript

Последний раз редактировалось Dmitry A. Soshnikov, 29.01.2010 в 13:05.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с if...else parzh-junior Элементы интерфейса 18 04.12.2009 17:17
Модуль для работы с геометрией окна JSprog Библиотеки/Тулкиты/Фреймворки 25 31.08.2009 12:54
Кроссбраузерный XMLHttpRequest Kolyaj Ваши сайты и скрипты 12 02.07.2009 17:06
вызов метода return для функции-родителя evgen28 Общие вопросы Javascript 17 22.01.2009 15:46
Альтернатива insertAdjacentHTML в Mozilla FireFox ПавелЪ Общие вопросы Javascript 4 19.01.2009 01:22