Вход

Просмотр полной версии : Как в javascript передать ссылку?


jtd
15.06.2017, 19:48
Зачёт горит, завис на одном задании - намертво

Напишите функцию swap(a, b), меняющую местами значения a и b. Для этого в теле функции используйте дополнительную переменную.

let a = 0, b = 1;
swap(a, b);
console.log(a); // 1
console.log(b); // 0


Что-то я не пойму как реализуется ссылочный тип в JS

function (a, b) {
var c = a;
a = b;
b = c;
}

- бесполезно, меняется только внутри функции.

function (&a, &b) {

- ошибка синтаксиса.

j0hnik
15.06.2017, 20:02
<head>
<meta charset="utf-8">
</head>
<body>
<script>
var a = 0, b = 1;
function swap () {
var c = a;
a = b;
b = c;
}
swap();
console.log(a); // 1
console.log(b); // 0
</script>
</body>

j0hnik
15.06.2017, 20:05
даже ничего передавать не надо, функция сама возьмет если ей понадобится.

jtd
15.06.2017, 20:10
Rise,
я не понял что изменится если написать например function swap(x1, x2) ?
До переданных переменных никак не "дотянуться"

j0hnik
15.06.2017, 20:10
j0hnik, но по условию задачи должны быть аргументы)
Если так то да, как вы сказали изменить имена аргументов

let a = 0, b = 1;
function swap (c,d) {
var c = a;
a = b;
b = c;
}
swap(a,b);
console.log(a); // 1
console.log(b); // 0

ruslan_mart
15.06.2017, 20:11
Rise, в условии задачи не сказано, что параметры должны лежать вне функции. Полагаю, нужно поменять параметры местами внутри самой функции и в ней же вывести результат.

jtd
15.06.2017, 20:16
j0hnik,
а если переменные a и b по-другому названы?

jtd
15.06.2017, 20:21
Вы наверно неправильно поняли, нужен swap точно такой же как в C++

jtd
15.06.2017, 20:22
Rise,
да ёбаный в рот, а нахуй ты мне лечишь за названия переменных, а потом говоришь что "без разницы как названы", пиздец блять.

Alexandroppolus
15.06.2017, 20:26
в js по ссылке передаются только объекты
точнее, ссылки на объекты передаются по значению.

т.е. даже если бы эти a и b из задачи были объектами, то в таком виде задача всё равно бы не решалась, в общем случае.

jtd
15.06.2017, 20:37
Rise,
еблан при чём тут названия аргументов и названия переменных? Ты с программированием дальше хелловорлда знаком?

в сишке я могу написать

int SWAP(int &a, int &b) {
int c = a;
a = b;
b = c;
}

и похуй что туда передавать, могу написать так же SWAP(a, b) и всё поменяется

Мне в лабе надо то же самое на жс
Зоопарк блять.

ruslan_mart
15.06.2017, 22:10
Немного извращений :D

const myEval = code => eval(code);

function swap(a, b) {
myEval(`a = ${b}; b = ${a}`);
}


let a = 0, b = 1;
swap(a, b);
console.log(a);
console.log(b);

Сойдёт?

jtd
16.06.2017, 00:23
Rise,
а в джаваскрипте есть?

Invalid left-hand side in assignment

laimas
16.06.2017, 04:11
Rise,
из нового не все поддерживает не только IE.

laimas
16.06.2017, 05:38
Rise,
ну если бы новое, это только деструктуризация массива, то все было бы Ок. :)
А на практике новое из HTML5, CSS3 и JS далеко не всё и всеми поддерживается. И бог знает сколько еще времени потребуется на это.