Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Замыкания и Function-Expression (https://javascript.ru/forum/misc/28801-zamykaniya-i-function-expression.html)

Arris 03.06.2012 08:54

Замыкания и Function-Expression
 
Читаю две статьи: http://javascript.ru/basic/closure
и Function-Expression в новичковом вопросе

С одной стороны (статья по замыканиям):
function outer() {
	var outerVar;
	var func = function() {
	}
	return func;
}
// функция func() доступна вне функции outer().



С другой:
var a = (function () {
  // "private"
  var b = 10;
  function c() {   }
  // интерфейс наружу опущен
  };  

})();
// Однако, ни "b", ни "c" не доступны посредством "а" напрямую.

И чему верить? Чего я не понимаю?

Octane 03.06.2012 09:05

Цитата:

Сообщение от Arris
функция func() доступна вне функции outer()

outer же возвращает func
function outer() {
	var outerVar;
	var func = function () {
	};
	return func;
}

*!*
var myFunc = outer();
*/!*

func будет доступна по ссылке myFunc, и к outerVar можно будет получить доступ только внутри func
function outer() {
	var outerVar = 1;
	return function () {
		return typeof outerVar;	
	};
}

var myFunc = outer();

alert([typeof outerVar, myFunc()]);


Еще http://dmitrysoshnikov.com/ecmascrip...er-6-closures/ почитайте, ну остальные статьи там.

bes 03.06.2012 10:05

В вашем коде переменной а присваивается не функция, а результат её вызова, а так как функция ничего конкретного не возвращает, результатом будет underfined.

var a = (function () {
  // "private"
  var b = 10;
  function c() {   //} - это была лишняя скобка
  // интерфейс наружу опущен
  };  

})();
alert(a)


var a = (function () {
  var b = 10;
  return  function c() {alert(b)};  
})();

a();

nerv_ 03.06.2012 11:35

Arris, думаю, для начала Вам нужно определиться с тем, что такое замыкания и от этого плясать дальше.


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