Когда вы назначаете примитивный тип, такой как число, строка или логическое значение для переменной в JavaScript (или любой другой язык), он открывает слот в памяти, помещает его и помещает на нем метку, на которую ссылаются позже, правильно?Назначение примитивного типа vs Composite-type для переменной
var a = 1;
var b = 'foobar';
var c = false;
var d;
// What our memory would happen to look like:
var_a => 0x00 [1 ]
var_b => 0x01 ["foobar" ]
var_c => 0x02 [false ]
var_d => 0x03 [undefined ]
Теперь вот мой вопрос, как композитные-типы, такие как массивы, функции или объекты, хранящиеся в памяти? Я слышал, что объекты создаются где-то в памяти, а переменная содержит только ссылочный адрес этого объекта. Как это возможно? Из таблицы памяти, которую я напечатал выше, кажется, что таблицы памяти могут содержать только одно значение.
Есть ли специальные слоты в памяти для композитных типов? Являются ли массивы и функции сохранены так же, как объекты (например, по ссылке)?
Это очень зависит от реализации. Вы можете прочитать о [дизайн V8] (https://developers.google.com/v8/design) и увидеть, что объекты похожи на более традиционные реализации. Я не удивлюсь, если массивы и функции будут оптимизированы еще больше. – Tibos
js (v8 здесь) не использует память, как вы описываете. Есть как минимум еще два слоя абстракции между var и ram. О всем, кроме номеров и строк, хранится «по ref». Короче говоря, разные двигатели могут варьироваться в зависимости от объема, который они используют для выполнения кода, который вы опубликовали. – dandavis
Это правда, но это настолько абстрактно, и ресурсы на этом очень расплывчаты. Я начал смотреть на Java, чтобы я мог больше узнать о памяти, о том, как она работает, и об управлении памятью, но я продолжаю угадывать свои знания о JavaScript или что-то, что я узнал по этому поводу. – W3Geek