Балансировщик нагрузки не имеет доступного сервера для клиента

Первобытный тип имеет фиксированный размер в памяти. Например, число занимает восемь байтов памяти, а логическое значение может быть представлено только одним битом. Тип числа является самым большим из примитивных типов. Если каждая переменная JavaScript резервирует восемь байтов памяти, переменная может непосредственно содержать любое примитивное значение.

Это упрощение и не предназначено как описание фактической реализации JavaScript.

Однако ссылочные типы - это еще одно дело. Объекты, например, могут быть любой длины - они не имеют фиксированного размера. То же самое относится к массивам: массив может иметь любое количество элементов. Аналогично, функция может содержать любое количество кода JavaScript. Поскольку эти типы не имеют фиксированного размера, их значения не могут храниться непосредственно в восьми байтах памяти, связанных с каждой переменной. Вместо этого переменная хранит ссылку на значение. Как правило, эта ссылка является некоторой формой указателя или адреса памяти. Это не значение самого значения, но оно сообщает переменной, где искать значение.

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

var a = 3.14;  // Declare and initialize a variable
var b = a;     // Copy the variable's value to a new variable
a = 4;         // Modify the value of the original variable
alert(b)       // Displays 3.14; the copy has not changed

В этом коде нет ничего удивительного. Теперь рассмотрим, что произойдет, если мы немного изменим код, чтобы вместо массивов использовать массивы (ссылочный тип):

var a = [1,2,3];  // Initialize a variable to refer to an array
var b = a;        // Copy that reference into a new variable
a[0] = 99;        // Modify the array using the original reference
alert(b);         // Display the changed array [99,2,3] using the new reference

Если этот результат не кажется вам неожиданным, вы уже хорошо знакомы с различием между примитивными и ссылочными типами. Если это кажется удивительным, взгляните на вторую строчку. Обратите внимание, что это ссылка на значение массива, а не сам массив, который присваивается в этом выражении. После этой второй строки кода у нас все еще есть только один объект массива; у нас просто есть две ссылки на него.

13
задан Community 23 May 2017 в 10:31
поделиться