Подтвердить что ты не робот

У JavaScript есть куча памяти?

Другими словами, какие параметры мне нужно распределять по памяти в JavaScript?

Я знаю, что вы можете распределять память либо глобально, либо внутри области функций. Могу ли я распределять память динамически? Что означает оператор new?

Изменить: здесь конкретный пример. Как бы вы реализовали чтение целочисленного значения от пользователя - n, а затем прочитали целые числа n в массив?

4b9b3361

Ответ 1

вы не можете выделить память. вы можете создавать объекты. что делает new.

теперь javascript - странное существо: функции также являются объектами в javascript. Таким образом, это означает, что вы можете создать довольно много всего, используя new.

Итак, оператор new означает, что создается новый объект.

Javascript также мусор - собирает эти переменные, как это происходит в java. Поэтому, если вы знаете java, вам будет легко провести параллели.

веселит,

JRH

PS: когда вы выделяете объекты, вы действительно выделяете память. Только вы не делаете это явно. Вы можете выделить массив и заставить его вести себя как буфер памяти, но это резко ухудшит производительность javascript: массивы javascript не являются буферами в памяти, они также являются объектами (как и все остальное).

Ответ 2

JavaScript содержит сборку мусора и обрабатывает это для вас.

Однако вы можете помочь с помощью delete, где это необходимо.

Из Правила кодирования JavaScript Apple:

Так же, как вы использовали новый оператор для создать объект, вы должны удалить объекты, когда вы закончите с их, например:

delete myObjectVariable;

Время выполнения JavaScript автоматически мусор собирает объекты, когда их значение равно null. Однако установка объект null не удаляет переменная, которая ссылается на объект из памяти. Использование delete гарантирует, что эта память дополнительно исправлена к памяти, используемой объектом сам. (Также легче увидеть места, где ваши ассигнования и деаллокация не сбалансирована, если вы явно вызовите delete.)

Стив

Ответ 3

Хммм звучит для меня так, как будто вы исходите из языка, ориентированного на память, и пытаетесь обучить рожок этой логике в JS. Да JS использует память (конечно), но у нас есть сбор мусора, чтобы позаботиться о его очистке.

Если вы подробно расскажете о смещениях выделения памяти, вам придется охотиться за этим. Но, как правило, большой палец, когда вы используете var, new или объявляете новую функцию (или закрытие), вы поглощаете память. Вы можете получить vars в null, чтобы помечать их для сбора мусора, и вы можете использовать ключевое слово delete, хотя мало кто делает это, если они не работают на стороне сервера (например, я с ASP JScript), где это важно.

Ответ 4

Javascript действительно, очень дружелюбный - действительно, слишком дружелюбный пополам!

Если у вас есть массив из 3 элементов, и вы хотите добавить четвертый, вы можете просто действовать так, как будто это расположение массива уже существует:

    var arr = ['zero', 'one', 'two'];
    // Now you have arr[0], arr[1] and arr[2].
    // arr.length is equal to 3.
.
    // to add arr[8]:
    arr[8] = 'eight';
    // Now you have arr[0] through arr[8]. arr.length is equal to 9.
    // and arr[3] through arr[7] exist, and 
    // are initialized to undefined. (If I remember right.)

Таким образом, при добавлении элеклов не требуется особо выделять выделение памяти.

Ответ 5

Нет, вам не нужно и не может выделить память. Интерпретатор JavaScript делает это автоматически.

Ответ 6

Чтобы ответить на заголовок вопроса, если вы хотите доверять MDN, большинство реализаций JavaScript имеют кучу:

Heap

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

Несколько Runtimes, сообщающихся вместе

Веб-рабочий или перекрестный источник iframe имеет свой собственный стек, кучу и очередь сообщений. Два разных режима времени могут взаимодействовать только через отправка сообщений через метод postMessage. Этот метод добавляет сообщение в другое время выполнения, если последний прослушивает события сообщений.

Для более глубокого погружения в управление памятью также есть статья здесь, хотя большая часть этого является специфичной для реализации.

Ответ 7

Вам не нужно вручную управлять памятью в Javascript. Оба кучи и стеки используются под капотом для управления памятью, и это зависит от реализации. Обычно локальные переменные находятся в стеке, а объекты находятся в куче.