Проэлектроника

Мой блог

Пишу, что хочу ...

  • Home
    Home This is where you can find all the blog posts throughout the site.
  • Categories
    Categories Displays a list of categories from this blog.
  • Tags
    Tags Displays a list of tags that has been used in the blog.
  • Bloggers
    Bloggers Search for your favorite blogger from this site.
  • Team Blogs
    Team Blogs Find your favorite team blogs here.
  • Login

Хороший пример от Сошникова

Posted by on in JavaScript
  • Font size: Larger Smaller
  • Hits: 980
  • 0 Comments
  • Subscribe to this entry
  • Print

 Как сделать выход из родительской функции (return), внутри вложенной функции:

var $break = {};
  
function getElement() {
  
  try {
  
    [1, 2, 3].forEach(function (element) {
  
      if (element % 2 == 0) {
        // "return" из getElement
        alert('found: ' + element); // found: 2
        $break.data = element;
        throw $break;
      }
  
    });
  
  } catch (e) {
    if (e == $break) {
      return $break.data;
    }
  }
  
  return null;
}
  
alert(getElement()); // 2

Здесь ключевая логика в том, что любое исключение порождаемое на любой вложенности, полностью останавливает работу всего дальнейшего скрипта.

Обычно я использую такой путь:

var func = (function () {
    var return_value = 0;

    for (var i = 0; i < 10; i+=1) {
        (function (x) {
            var some_another_value = 0;

            return_value += some_another_value + x;
        })(i);
    }

    return return_value;
})();
 

То есть ключевая логика здесь это return_value

Он более прост в понимании и реализации, но вариант от Сошникова более изящен.

0
Tagged in: closure javascript scope

Comments

  • No comments made yet. Be the first to submit a comment

Leave your comment

Guest Вторник, 26 Сентябрь 2017
Joomla 2.5