Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 03.06.2012, 08:54
Аватар для Arris
Интересующийся
Отправить личное сообщение для Arris Посмотреть профиль Найти все сообщения от Arris
 
Регистрация: 03.06.2012
Сообщений: 13

Замыкания и 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" не доступны посредством "а" напрямую.

И чему верить? Чего я не понимаю?
Ответить с цитированием
  #2 (permalink)  
Старый 03.06.2012, 09:05
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Сообщение от 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/ почитайте, ну остальные статьи там.

Последний раз редактировалось Octane, 03.06.2012 в 09:10.
Ответить с цитированием
  #3 (permalink)  
Старый 03.06.2012, 10:05
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

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

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

})();
alert(a)


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

a();
Ответить с цитированием
  #4 (permalink)  
Старый 03.06.2012, 11:35
Аватар для nerv_
junior
Отправить личное сообщение для nerv_ Посмотреть профиль Найти все сообщения от nerv_
 
Регистрация: 29.11.2011
Сообщений: 3,924

Arris, думаю, для начала Вам нужно определиться с тем, что такое замыкания и от этого плясать дальше.
__________________
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
$('my').load(); Как сделать, чтобы это заработало mycoding Общие вопросы Javascript 25 02.10.2016 23:43
Object.predefinedProperties создает новый объект с назначенными getter'ами/setter'ами devote Ваши сайты и скрипты 13 06.03.2012 21:57
2 function в 1 LAV45 AJAX и COMET 5 27.07.2011 14:49
Свойства посредством полиморфных функций tenshi Ваши сайты и скрипты 0 18.03.2010 17:12
хитросплетения Global,контекст,this,Reference kefi Общие вопросы Javascript 109 20.11.2009 23:34