установка битов конфигурации оборудования в оборудовании с использованием 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]это просто число, это примитивный тип и передается по значению. Это означает, что в функцию передается копия, не имеющая связи с . В результате модификации elementparam не меняется (см. документы).

Примитивные параметры (например, число) передаются функциям по значению; значение передается функции, но если функция меняет значение параметра, это изменение не отражается ни глобально, ни в вызывающей функции.

Для справки, в 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 
Другие вопросы по тегам