установка битов конфигурации оборудования в оборудовании с использованием JS
Моя проблема может быть сведена к этому тривиальному (или так казалось) куску кода
var myArray = [1,2];
function addOnetoArrayElement(element){
element +=1;
console.log(element); // Returns 3
}
addOnetoArrayElement(myArray[1]);
console.log(myArray[1]); // Returns 2
Я нахожу захватывающим тот факт, что с массивами можно выполнять всевозможные операции, такие как отображение, уменьшение, вставка в массив, но вообще нет ссылки на выполнение простых арифметических операций над элементами массива. Не обращайте внимания на все эти вещи о подъеме, области видимости, передаче по значению и ссылке. Я уверен, что, возможно, когда-нибудь я буду знать достаточно, чтобы внести свой вклад в этот дискурс. Что я должен сделать, чтобы myArray[1] = 3?
1 ответ
Вы предполагаете, что это будет передано функции таким образом, чтобы она могла изменить этот элемент (так называемый по ссылке).
Но
myArray[1]
это просто число, это примитивный тип и передается по значению. Это означает, что в функцию передается копия, не имеющая связи с . В результате модификации
element
param не меняется (см. документы).
Примитивные параметры (например, число) передаются функциям по значению; значение передается функции, но если функция меняет значение параметра, это изменение не отражается ни глобально, ни в вызывающей функции.
Для справки, в JS всего 7 примитивных типов данных : строка, число, bigint, логическое значение, неопределенный, символ и ноль.
Чтобы решить эту проблему, нам нужно передать целое в функцию в качестве первого параметра (по ссылке, потому что это
Array
) и индексировать как второй. В таком случае
myArray
будет передан по ссылке, и функция сможет его изменить.
var myArray = [1,2];
function addOnetoArrayElement(arr, ind){
arr[ind] += 1;
console.log(arr[ind]); // Returns 3
}
addOnetoArrayElement(myArray, 1);
console.log(myArray[1]); // Returns 3