Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 17.12.2018, 03:23
Аспирант
Отправить личное сообщение для jay-S Посмотреть профиль Найти все сообщения от jay-S
 
Регистрация: 05.10.2011
Сообщений: 76

почему функция внутри функции = undefined
Здравствуйте!

Подскажите пожалуйста, почему не работает как я хочу

function func2(n) {
n = 1;
}

function func1() {
var n;
func2(n);
console.log(n);
}

func1();
Ответить с цитированием
  #2 (permalink)  
Старый 17.12.2018, 05:05
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

jay-S,
бред какой то написан
Ответить с цитированием
  #3 (permalink)  
Старый 17.12.2018, 05:09
Аспирант
Отправить личное сообщение для jay-S Посмотреть профиль Найти все сообщения от jay-S
 
Регистрация: 05.10.2011
Сообщений: 76

Мне нужно чтобы внутри функции сработала другая функция
и нужно получить значение
Ответить с цитированием
  #4 (permalink)  
Старый 17.12.2018, 05:21
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

jay-S,
вы вызываете func2 и передаете в нее undefined. она выполнилась, return в ней нет, вернула тоже undefined которой интерпретатор тут же "забыл". в консоль вывелась объявленная var n; в func1. Ваш артхаос заставляет улыбнуться =)
Ответить с цитированием
  #5 (permalink)  
Старый 17.12.2018, 05:28
Аватар для j0hnik
Профессор
Отправить личное сообщение для j0hnik Посмотреть профиль Найти все сообщения от j0hnik
 
Регистрация: 01.12.2016
Сообщений: 3,650

function func2() {
	return 1;
}

function func1() {
	console.log(func2());
}

func1();


наверное так, но я не уверен
Ответить с цитированием
  #6 (permalink)  
Старый 17.12.2018, 09:25
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,127

Сообщение от jay-S
Подскажите пожалуйста, почему не работает как я хочу
Потому что n в одной функции и n в другой функции это совершенно разные переменные. Что бы разобраться почитай про области видимости переменных.
Ответить с цитированием
  #7 (permalink)  
Старый 17.12.2018, 10:30
Аватар для SuperZen
Профессор
Отправить личное сообщение для SuperZen Посмотреть профиль Найти все сообщения от SuperZen
 
Регистрация: 08.11.2017
Сообщений: 642

примитивы передаются значением (создается копия объекта), объекты передаются ссылкой (передается исходный объект)

let n = 2
  let o = {
    n: 2
  }

  function changeN(n) { // здесь копия (новый экземпляр) n
    n = 3 // замена копии
  }

  changeN(n) // здесь n = 2

  function changeNObject(o) { // здесь ссылка на объект "o"
    o.n = 3 // заменим n внутри объекта
  }

  changeNObject(o)

  console.log(n, o) // 2, {n: 3}
Ответить с цитированием
  #8 (permalink)  
Старый 17.12.2018, 12:54
Аватар для Alexandroppolus
Профессор
Отправить личное сообщение для Alexandroppolus Посмотреть профиль Найти все сообщения от Alexandroppolus
 
Регистрация: 25.10.2016
Сообщений: 1,005

Сообщение от SuperZen
объекты передаются ссылкой
если совсем точно, то ссылки на объекты передаются значением

function func2(n) {
  n = {a:1};
}

function func1() {
  var n = {a:0};
  func2(n);
  alert(n.a);
}

func1();


в некоторых других языках (делфи, с#, с++) можно передать параметр именно по ссылке, так что код из примера выведет 1
Ответить с цитированием
  #9 (permalink)  
Старый 17.12.2018, 17:49
Аспирант
Отправить личное сообщение для jay-S Посмотреть профиль Найти все сообщения от jay-S
 
Регистрация: 05.10.2011
Сообщений: 76

Благодарю вас всех за разъяснение!
С наступающим вас!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Почему не срабатывает функция внутри функции? Conus Элементы интерфейса 1 17.04.2016 15:50
Почему не отрабатывает функция? zsaz jQuery 0 26.03.2016 13:47
Вызов функции внутри другой функции. Win32Sector Events/DOM/Window 1 12.12.2015 20:28
изменение значения глобальной переменной внутри функции mgmarket Серверные языки и технологии 14 13.09.2011 00:56
Почему match() возвращает значение undefined yolka Events/DOM/Window 2 24.04.2010 15:09