Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   оператор return возвращает значение, а не ссылку. (https://javascript.ru/forum/misc/17321-operator-return-vozvrashhaet-znachenie-ne-ssylku.html)

Vertuplatonium 14.05.2011 20:17

оператор return возвращает значение, а не ссылку.
 
Создал трехмерную матрицу, и хочу создать функцию которая бы возвращала ссылку на ячейку

get(1,3,2) параметры это координаты в матрице. Матрица представлена массивом массивов массивов.

Эта функция возвращает не ссылку а ЗНАЧЕНИЕ которое лежит в ячейке.

================================================== =============
обьясните как возвращать ссылки на примере этого одномерного массива




var arr = [1,2,3,4,5]


function ww(id){
return arr[id]
}

alert(ww(3)) // выводит значение ячейки номер 3, то есть значение "4"

ww(3) = 9999999 // вот тут ошибка так как функция возвращает не ссылку, а примитивное значение
================================

что вот так matrix[1][3][2] важно обращаться я знаю, но есть причины чтобы функция умела возвращать именно ссылку.

Matre 14.05.2011 20:52

Функция возвращает константу в любом случае и исправить это нельзя.
Можно использовать функцию вида ww.set(1, 2, 3, value);

Ivan Galin 16.05.2011 03:14

Цитата:

Сообщение от Matre
Функция возвращает константу в любом случае

все решает тип значения в массиве
  • если элементом массива является элементарное значение - то функция возвратит копию этого значения
  • если в массиве хранятся объекты типа Number - то функция вернет ссылку, но изменить его нельзя :-E
Цитата:

Объект Number(числовой объект) имеет тип Object и является экземпляром встроенного объекта Number. То есть, числовой объект создается при помощи конструктора Number директивой new, при этом в качестве аргумента конструктора передаётся число. Результирующий объект обладает неявным (безымянным) свойством, содержащим это численное значение.
можно так:
var a=[{v:111},{v:222},{v:333},{v:444}];
function get(i){return a[i]};
console.log(a[2].v)    // 333
get(2).v = 555;
console.log(a[2].v)    // 555

или так:
var a=[111,222,333,444];
function get(i){return function(v){return a[i]=v}};
var set2 = get(2);
console.log(a[2])    // 333
set2(555);
console.log(a[2])    // 555

Matre 16.05.2011 04:47

Цитата:

все решает тип значения в массиве
А теперь попробуйте написать такую функцию, чтобы вызов

func(...) = ...;


не выбрасывал ошибку.

Ivan Galin 16.05.2011 14:02

Ну если понимать
Цитата:

Функция возвращает константу
как
Цитата:

Функция возвращает НЕ Reference
тогда конечно да, согласен


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