Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   почему функция внутри функции = undefined (https://javascript.ru/forum/misc/76242-pochemu-funkciya-vnutri-funkcii-%3D-undefined.html)

jay-S 17.12.2018 03:23

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

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

function func2(n) {
n = 1;
}

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

func1();

j0hnik 17.12.2018 05:05

jay-S,
бред какой то написан

jay-S 17.12.2018 05:09

Мне нужно чтобы внутри функции сработала другая функция
и нужно получить значение

j0hnik 17.12.2018 05:21

jay-S,
вы вызываете func2 и передаете в нее undefined. она выполнилась, return в ней нет, вернула тоже undefined которой интерпретатор тут же "забыл". в консоль вывелась объявленная var n; в func1. Ваш артхаос заставляет улыбнуться =)

j0hnik 17.12.2018 05:28

function func2() {
	return 1;
}

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

func1();


наверное так, но я не уверен

MallSerg 17.12.2018 09:25

Цитата:

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

Потому что n в одной функции и n в другой функции это совершенно разные переменные. Что бы разобраться почитай про области видимости переменных.

SuperZen 17.12.2018 10:30

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

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}

Alexandroppolus 17.12.2018 12:54

Цитата:

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

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

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

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

func1();


в некоторых других языках (делфи, с#, с++) можно передать параметр именно по ссылке, так что код из примера выведет 1

jay-S 17.12.2018 17:49

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


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