Возврат аргумента как переменной

96
22 января 2018, 09:29

Почему:

var one = 0;
function inputOne(){
  return one = prompt('Input one');
}

возвращает без проблем, а если передавать переменную как аргумент:

var one = 0;
function input(e){
  return e = prompt('Input one');
}

то она только локально внутри функции меняется? В чем разница вызовов?

Answer 1

Разница в том что в первом случае var one = 0; у вас определена глобально (во внешнем коде). А значит доступна во всех функциях и во вне их.

А e у вас чисто локальная переменная, во вне она не объявлена, значит и недоступна во вне.
Во втором случае e это ссылка, даже если туда передать one то ссылка e будет указывать на one. И если она задаётся в промпт, то это просто ссылка e будет указывать на новое значение, а one при этом не затронется.

То есть в результате prompt создастся новый объект и ссылка e будет указывать на него, в то время как ссылка one из внешнего кода куда ссылалась туда и продолжила ссылаться, на старый объект.

Зато если вы туда передадите сложный объект, то уже внутри него замены произойдут

var one = {one:0}; 
function input(e){ 
  return e.one = prompt('Input one'); 
} 
 
input(one); 
console.log(one);

READ ALSO
Можно ли подгружать рекламу Google спустя время?

Можно ли подгружать рекламу Google спустя время?

Доброго времениКак мера обхода Adblock подумал, а можно ли как-то попробовать подгружать рекламу гугла, спустя пару секунд, например ?

99
JQVmap баг при измении цвета динамически

JQVmap баг при измении цвета динамически

Делаю карту России с помощью плагина jqvmap

57
Draft js for React

Draft js for React

Решил создать текстовый редактор на админке для сайтаНашел что популярная для React библиотека Draft

73
Механизм оповещения пользователей

Механизм оповещения пользователей

Хочу сделать оповещение пользователей с подтверждением о прочтенииПридумал только такой механизм:

98