Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   замыкания, почему функция не видит переменные (https://javascript.ru/forum/misc/47617-zamykaniya-pochemu-funkciya-ne-vidit-peremennye.html)

ruvi 31.05.2014 15:07

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

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


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


почему переменные a и b не беруться из замыкания?

рони 31.05.2014 15:24

Цитата:

Сообщение от ruvi
почему переменные a и b не беруться из замыкания

а их кто-то в функцию передавал
function f1(){
	var a = 5,
	     b = 6;

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


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

f1();

ruvi 31.05.2014 15:47

а можно как-то обратиться к переменным a, b из f2, не передавая их в f2 как аргументы?

jsnb 31.05.2014 16:03

Цитата:

Сообщение от ruvi (Сообщение 314146)
а можно как-то обратиться к переменным 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();

Erolast 31.05.2014 16:17

Ты неправильно понял суть работы замыканий. Влияет не то, где функция вызвана, а то, где она объявлена.

ruvi 31.05.2014 17:36

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


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