0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 23
|
||||||
1 | ||||||
О передаче аргументов в функцию06.03.2016, 21:49. Показов 1997. Ответов 16
Метки нет (Все метки)
Я полный нубер, не могу понять по прердаче аргументов в ф-цию. Вот взять
то есть по значению передаються только примитивные типы?
0
|
06.03.2016, 21:49 | |
Ответы с готовыми решениями:
16
Передача аргументов в функцию, вызываемую setTimeout Описать и протестировать функцию с переменным количеством аргументов произвольного типа, возвращающую максимум Функцию не работает при передаче разных значений. передача аргументов в функцию |
Хитрая блондиночка $)
1472 / 988 / 399
Регистрация: 21.12.2015
Сообщений: 3,785
|
|
06.03.2016, 21:55 | 2 |
Да. Примитивы типа целого или строки передаются как значение (или точнее как копия).
А объекты уже по ссылке.
1
|
9 / 9 / 2
Регистрация: 24.01.2016
Сообщений: 87
|
|
07.03.2016, 09:51 | 3 |
В JavaScript все аргументы передаются по значению, по ссылке в JS ничего не передаётся.
1
|
супермизантроп
3941 / 2979 / 692
Регистрация: 18.04.2012
Сообщений: 8,625
|
|
07.03.2016, 10:19 | 4 |
с объектами напрямую яваскрипт вообще не работает
var myVar = new Object; // переменная myVar - это не сам объект, а лишь ссылка на него аналогично и с объектами DOM var myVar2 = document.getElementById ('elem_id'); // и myVar2, и document.getElementById ('elem_id') -- это ссылки на объект, // а сам объект (HTML-тег с id="elem_id") виртуален и находится в DOM
1
|
0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 23
|
|
07.03.2016, 10:55 [ТС] | 5 |
efx,
В таком случае почему, в таком случае, примитивы и обьекты ведут себя по разному при передаче в ф-цию?
0
|
Superposition
950 / 615 / 256
Регистрация: 27.10.2013
Сообщений: 2,083
|
|
07.03.2016, 13:51 | 6 |
Сообщение было отмечено use strict как решение
Решение
Вай!) а зачем тогда DCA? Если б все было так радужно, то утечки памяти можно было бы делать на счет 3 и никакой сборщик ни разу не помог бы)
1
|
81 / 81 / 50
Регистрация: 26.11.2012
Сообщений: 303
|
|
07.03.2016, 14:28 | 7 |
efx, Здрасте. по значению передаются только примитивные типы. не запутывайте человека
1
|
9 / 9 / 2
Регистрация: 24.01.2016
Сообщений: 87
|
||||||
07.03.2016, 18:16 | 8 | |||||
Ну зачем же вы врёте? Вроде изучаете с++ и пишите такие глупости про передачу аргументов по ссылке в JS. Вы как раз и вводите в заблуждение человека своими словами.
Вы в си или с++ пробовали по ссылке передавать аргумент? Вы знаете, что именно присваивается идентификатору по ссылке? Вот вам пример:
Добавлено через 4 минуты Одинаково, вы параметру значение присваиваете, примитивное или ссылку. Если бы происходило присваивание по ссылке, то изменение значения переменной, так же отражалось бы и на значении оригинальной переменной. Однако этого не происходит, как показано в примере выше. Присвоить саму ссылку именно на объект и "присвоить по ссылке" это немного разные вещи
1
|
0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 23
|
||||||
07.03.2016, 20:53 [ТС] | 9 | |||||
efx, Все равно тяжело вьезжаю. Вот функция
Добавлено через 19 минут efx, ваш пример, чесно говоря, меня вообще из тапок выбил. обьект передается в ф-цию, там он меняеться( добавляем свойство str), затем какая то вуду магия пошла обьясните пожалуста, хотя бы пару строчек
0
|
9 / 9 / 2
Регистрация: 24.01.2016
Сообщений: 87
|
|
07.03.2016, 21:20 | 10 |
Сообщение было отмечено use strict как решение
Решение
Копия массива не создавалась, а вот копия значения (ссылки) создалась.
Вы параметру присвоили ссылку на объект (массив), то есть передав массив параметр получил копию значения (ссылки) на объект, с этим значением вы и работаете в функции. Параметр имеет свою копию ссылки на объект, никак не связанную с оригинальной ссылкой. Это две разные ссылки, просто ссылаются на один объект в памяти. Если бы в JS было присваивание по ссылке, то ЛЮБОЕ новое присвоенное значение параметру, так же отражалось бы на оригинальной переменной. Чтобы в этом лучше разобраться и понять что такое присваивание по ссылке и как оно работает на самом деле, установите самый простой компилятор по си к примеру (pelles c), выполните присваивание по ссылке и вы увидите разницу между присваиванием по ссылке и по значению. Лучше один раз попробовать, увидеть и понять, чем пытаться понять без наглядного примера
1
|
0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 23
|
|
07.03.2016, 21:31 [ТС] | 11 |
efx, дело в том что передача по значению и по ссылке мне, к примеру в ++, мне ясна (во всяком случае мне так хочеться думать). Так вот здесь совсем другой коленкор выходит. А почитаю ка я Фленегана, вдруг пойму чего. А вам - большое спасибо.
0
|
0 / 0 / 0
Регистрация: 06.03.2016
Сообщений: 23
|
|||||||||||
08.03.2016, 10:12 [ТС] | 13 | ||||||||||
efx, Спасибо, очень и очень доходчивая книженция. По скольку тип ссылочный, создается илюзия что
обьекты идут по ссылке, на самом деле все передаетьс по значению. В плюсах это так
0
|
9 / 9 / 2
Регистрация: 24.01.2016
Сообщений: 87
|
|
08.03.2016, 17:19 | 14 |
угу
1
|
Superposition
950 / 615 / 256
Регистрация: 27.10.2013
Сообщений: 2,083
|
|
10.03.2016, 03:16 | 15 |
Неа Это создает новую переменную и равносильно инструкции var obj = new Object;
В старом стандарте JavaScript псевдо-массив arguments и переменные-параметры ссылаются друг на друга, в новом нет. Поэтому если установить внутри функции директиву strict, то arguments покажет старое значение, в другом случае мы увидим новое значение. Так или иначе, все объекты передаются по ссылке это черным по белому написано в стандарте Call by reference(pass-by-reference). В общем-то меня не это интересует, а то откуда этот листинг с комментариями. Из книги??
0
|
9 / 9 / 2
Регистрация: 24.01.2016
Сообщений: 87
|
|
10.03.2016, 07:19 | 16 |
0
|
61 / 39 / 20
Регистрация: 06.12.2015
Сообщений: 155
|
|
10.03.2016, 07:40 | 17 |
Как можно сделать копию(ссылку) на объект и при этом получить другое число? Могу догадываться - никак. Если получится другое число, то будет ссылаться на другую переменную и другое число. Если сделать ссылку на другое место в памяти, то тогда придется копировать весь массив(ну чтоб работало) - это не оптимизация.
0
|
10.03.2016, 07:40 | |
10.03.2016, 07:40 | |
Помогаю со студенческими работами здесь
17
Ошибка при передаче аргументов в функцию итерация при передаче аргументов в функцию VS 2012: Ошибка при передаче аргументов в функцию WriteLine() проверьте. Напишите функцию семи аргументов, значением которой служит сумма всех семи аргументов Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |