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

Александр Церковный

Мысли, истории, новости, всё, что меня касается ...

  • 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
Subscribe to this list via RSS Blog posts tagged in scope

 Как сделать выход из родительской функции (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

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

Tagged in: closure javascript scope
Hits: 936
0
'use strict';

var test = {
    aa : function () {
        var bb = {
            j : function () {
                console.log(this);
            }
        };
        
        function bar () {
            return bb.j;
        }
        
        return bar()();
    }
};

test.aa(); // this === ???

Такой вариант:

'use strict';

var test = {
    aa : function () {
        var bb = {
            j : function () {
                console.log(this);
            }
        };
        
        function bar () {
            return bb.j();
        }
        
        return bar();
    }
};

test.aa(); // this === ???

И последний

'use strict';

var test = {
    aa : function () {
        var bb = {
            j : function () {
                console.log(this);
            }
        };
        
        function bar () {
            return bb.j;
        }
        
        return bar();
    }
};

test.aa()(); // this === ???
Tagged in: javascript scope this
Hits: 3724
Joomla 2.5