Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 31.05.2014, 15:07
Новичок на форуме
Отправить личное сообщение для ruvi Посмотреть профиль Найти все сообщения от ruvi
 
Регистрация: 31.05.2014
Сообщений: 9

замыкания, почему функция не видит переменные
Скажите , пожалуйста почему не работает этот код?
И как его правильно написать, чтоб работал?

function f1(){
	var a = 5,
	     b = 6;
				
	     f2();// не видит a, b


}
function f2(){
	alert(a + b);
}
		
f1();


почему переменные a и b не беруться из замыкания?
Ответить с цитированием
  #2 (permalink)  
Старый 31.05.2014, 15:24
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от ruvi
почему переменные a и b не беруться из замыкания
а их кто-то в функцию передавал
function f1(){
	var a = 5,
	     b = 6;

	     f2(a,b);// не видит a, b


}
function f2(a,b){
	alert(a + b);
}

f1();
Ответить с цитированием
  #3 (permalink)  
Старый 31.05.2014, 15:47
Новичок на форуме
Отправить личное сообщение для ruvi Посмотреть профиль Найти все сообщения от ruvi
 
Регистрация: 31.05.2014
Сообщений: 9

а можно как-то обратиться к переменным a, b из f2, не передавая их в f2 как аргументы?
Ответить с цитированием
  #4 (permalink)  
Старый 31.05.2014, 16:03
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от ruvi Посмотреть сообщение
а можно как-то обратиться к переменным a, b из f2, не передавая их в f2 как аргументы?
Вынести в общую область видимости, например, за f1.
var a, b;
function f1() {
  a = 5; b = 6;
  f2();
}

function f2() {
  alert(a + b);
}
f1();

А из замыкания они бы брались если бы было что-нибудь вроде этого:
function f1() {
  var a = 5, b = 6;
  function f2() {
    alert(a + b);
  }
  f2();
}
f1();

Последний раз редактировалось jsnb, 31.05.2014 в 16:09.
Ответить с цитированием
  #5 (permalink)  
Старый 31.05.2014, 16:17
Аватар для Erolast
Профессор
Отправить личное сообщение для Erolast Посмотреть профиль Найти все сообщения от Erolast
 
Регистрация: 24.09.2013
Сообщений: 1,436

Ты неправильно понял суть работы замыканий. Влияет не то, где функция вызвана, а то, где она объявлена.
Ответить с цитированием
  #6 (permalink)  
Старый 31.05.2014, 17:36
Новичок на форуме
Отправить личное сообщение для ruvi Посмотреть профиль Найти все сообщения от ruvi
 
Регистрация: 31.05.2014
Сообщений: 9

Большое спасибо! Теперь всё понял.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замыкания. Непонятная функция. PashPP Общие вопросы Javascript 3 06.09.2012 00:10
Про замыкания Иваннн Общие вопросы Javascript 3 12.01.2011 11:12
хитросплетения Global,контекст,this,Reference kefi Общие вопросы Javascript 109 20.11.2009 23:34
Почему замыкания не работают? alex0071 Общие вопросы Javascript 2 18.08.2009 10:16
Замыкание - это... Zeroglif Общие вопросы Javascript 11 06.03.2009 22:04