Executando verificação de segurança...
3

Esses termos são bastante controversos. Não deveria, estão falando de ciência, mas acabou que na nossa área o "mercado" resolveu que ciência não importa muito e cada um tem sua própria opinião sobre certos termos. Muita informação, até mesmo em livros, é errada, ou pelo menos ruim. Tenha isso em mente. E isso é complicado porque quando a pessoa aprende errado ela treina o erro e passa tratar aquilo como certo. Acontece muito mais do imagina. E possivelmente, dependendo da personalidade, vai brigar com quem falar o certo para você no futuro. Tome cuidado.

Primitivo por exemplo, é um termo que ninguém sabe bem o que é, e cada tecnologia adota uma definição diferente. E até mesmo autores falando da mesma tecnologia adota algo diferente. Eu espero que a definição dada pelo livro esteja correta, não vou procurar especificamente sobre JavaScript. Provavelmente primitivo seja tipos por valor, nessa definição.

Já tem um erro em alguma definição porque objetos por valor (ou primitivos como estão sendo usados) podem estar no heap. Se ele está dentro de um objeto por referência, ele está no heap, isso inclui arrays por exemplo. Então já entenda que o livro parece uma referência ruim, se não tiver um contexto maior explicando isso. Pelo menos não errou falando de JS que é o foco do livro.

O termo "objeto variável" estou vendo pela primeira vez. Não sei se é tradução ruim, invenção do autor ou outra coisa. Provavelmente por isso não achou nada.

Outras linguagens

Os objetos por valor armazenam seu valor no local da variável, ou seja, não há uma indireção na variável para indicar onde o objeto está, ou seja, não há uma referência.

Objetos por referência possuem um ponteiro como seu valor básico. Esse é o valor que está na variável, mas o valor que interessa ao seu código está em outro lugar, apontado justamente por esse ponteiro.

Existem variáveis locais cujo escopo é só a função ou até mesmo uma parte da função (stack frame (útil)). Então há reserva de espaço para todas as variáveis daquele escopo e lá os objetos serão armazenados. Isso é a stack, que é uma pilha como o nome já diz (pode ajudar).

Pode chamar esse stack frame de objeto? Pode, não é um objeto do seu código, acho que é fácil confundir usando esse termo, então eu não chamaria, melhor usar o termo mais específico. Aliás, em geral as pessoas não entendem bem o que é um objeto.

Alguns objetos por serem por referência armazenam ponteiros ali e o objeto real vai para o heap. Dentro desses objetos podem ter outras variáveis. Variável é um conceito de programação e não de execução de código.

JavaScript

Pelo que eu entendi, JavaScript coloca tudo no heap. Mas não sei se isso é especificado pela linguagem. Pode ser só como as implmentações mais conhecidas funcionam. E aí pode mudar. Eu não vejo muita razão para a linguagem obrigar ser assim.

Quando uma linguagem abre mão da pilha ela fica bem mais ineficiente porque precisa ficar alocando e desalocando os objetos no heap, que é absurdamente mais caro que na pilha. Mas JavaScript é uma linguagem de script, não foi criada para fazer nada que exija performance mesmo, então está ok.

Ou seja, em vez de organiar as variáveis de um escopo como uma pilha que é mais eficiente, a implmentação de JS prefere manter isso como objetos soltos, ou seja, mistura tudo, como um heap. A implmentação pode eventalmente separar esse heap do outro heap mais tradicional, mas não consigo enxergar muita vantagem.

Conclusão

Esse detalhe não é muito relevante para maioria dos programadores, especialmente em JS. Em C, C+, Rust, eventualmente em Java, C#, Go pode ser mais relevante em alguns casos. Eu não me preocuparia muito com isso enquanto estiver usando JS.

Então, para o que costuma ver implementado, é isso mesmo.

Como pode ver isso e muito mais eu já respondi no Stack Overflow. Se quiser pode pesquisar lá.

Farei algo que muitos pedem para aprender programar corretamente, gratuitamente. Para saber quando, me segue nas suas plataformas preferidas. Quase não as uso, não terá infindas notificações (links aqui).

Carregando publicação patrocinada...