Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Как в javascript передать ссылку? (https://javascript.ru/forum/misc/69336-kak-v-javascript-peredat-ssylku.html)

jtd 15.06.2017 19:48

Как в javascript передать ссылку?
 
Зачёт горит, завис на одном задании - намертво

Цитата:

Напишите функцию 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) {


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

Rise 15.06.2017 19:59

jtd, так а нафига ты параметры функции также обозвал, дай им другие имена.

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

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

Rise 15.06.2017 20:06

j0hnik, но по условию задачи должны быть аргументы) вообще какое-то бредовое задание там из без дополнительной переменной можно обойтись, есть подозрение что его переписали с какого-то другого языка))

jtd 15.06.2017 20:10

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

j0hnik 15.06.2017 20:10

Цитата:

Сообщение от Rise (Сообщение 455588)
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 по-другому названы?

Rise 15.06.2017 20:16

Ruslan_xDD, как не сказано вон написано в первом посте :)

Rise 15.06.2017 20:20

jtd, да без разницы как названы, почитай что такое параметры функции и аргументы, и в js по ссылке передаются только объекты и нет специального синтаксиса для ссылок.

jtd 15.06.2017 20:21

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

jtd 15.06.2017 20:22

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

Rise 15.06.2017 20:26

jtd, так естественно не должны совпадать с глобальными даун)

Alexandroppolus 15.06.2017 20:26

Цитата:

Сообщение от Rise
в js по ссылке передаются только объекты

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

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

Rise 15.06.2017 20:30

Цитата:

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

:)

jtd 15.06.2017 20:37

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

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

Код:

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

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

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

Rise 15.06.2017 20:41

jtd, да не получится так если переменная примитивного типа (не объект), а явного указания ссылки в js нет.

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);


Сойдёт?

Rise 15.06.2017 22:21

Ruslan_xDD, не то, там смысл в том чтобы если поменял имена переменных только здесь let c = 1, d = 2; и тоже бы работало.

Rise 15.06.2017 22:50

jtd, зато в твоей сасишке такого нет)
let a = 0, b = 1;
[a, b] = [b, a];
console.log(a, b);

jtd 16.06.2017 00:23

Rise,
а в джаваскрипте есть?

Цитата:

Invalid left-hand side in assignment

Rise 16.06.2017 02:44

jtd, 2017 год на дворе, а ты всё пользуешься IE, новому стандарту JavaScript уже 2 года, а Microsoft не чешется.

laimas 16.06.2017 04:11

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

Rise 16.06.2017 05:27

laimas, а кто еще не поддерживает деструктуризацию массива на текущий момент, вроде уже все вышли из экспериментального режима, или трудно обновиться?

laimas 16.06.2017 05:38

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

Rise 16.06.2017 05:54

laimas, к 2020-му говорят) но если судить по тому что HTML5 перекочевал в "живой стандарт" то это никогда не закончится))


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