Veneomin
@Veneomin

Почему изменяется внешняя переменная?

Почему в этом случае выводит 5:
https://jsfiddle.net/epno6bne/
var a = 5;
function test(a){
    a ++;
}
test(a)
alert(a)

А в этом 6:
https://jsfiddle.net/a9x2xq0f/
var a = {b:5};
function test(a){
    a.b ++;
}
test(a)
alert(a.b)
  • Вопрос задан
  • 177 просмотров
Решения вопроса 1
@sh84
В js функциях параметры простого типа, в данном случае число, передаются по значению, т.е. копируются.
Объекты же передаются по ссылке, т.е. внутри функции тот же объект что снаружи.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
paradokso
@paradokso
Начинающий фронт-эндер
в первом случае функция у тебя возвращает ничего, т.е. 5 не инкреминируется. В самой функции авозрос, но он не передался дальше.

Во втором случае функцией ты увеличиваешь значение объекта, которое уже передалось, даже без ретурна.
Ответ написан
Комментировать
petyagrill
@petyagrill
Почему не скажу,
но так работает:

var a = 5;
function test(a){
    a ++; 
    return a;
}
a = test(a);
alert(a);


Делайте выводы

Второй вариант переписывает значение переменной, по этому ему не нужно возвращать результат
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы