Não consigo entender como a variável pode ter o nome duplicado aqui, e como é o acesso, acessando o mesmo nome cada uma retorna um valor diferente? como isso é guardado?
https://jsfiddle.net/erickdeoliveiraleal/mLrahfou/
ps.: Sinalizei como off-topic por erro. Por favor se puderem desfazer a sinalização.
Olá, Erick!
Em JavaScript, funções também são objetos, logo, tem propriedades, tanto nativas quanto definidas pelo programador.
Quando você define a propriedade nome
com o operador this
dentro da função construtora OlaSimples
, você está indicando que ela fará parte de todas as instâncias do tipo OlaSimples
e será acessível fora da função.
Já a variável nome
, aquela declarada com var
, existe apenas no escopo da função, ou seja, não poderá ser acessada fora de seu bloco.
O que quero dizer é que esses dois valores, apesar de serem referenciados pelo mesmo nome dentro do mesmo bloco, não estão armazenados no mesmo lugar.
Um armário com uma placa “A” em um vestiário 1 não é o mesmo armário “A” do vestiário 2. Entende?
Para entender um pouco melhor o fato de funções serem objetos, faça um teste simples: crie uma função qualquer (ou use essa do seu exemplo) e tente acessar a propriedade name
dela. Veja um exemplo:
function myFunc() { }
myFunc.name // retornará "myFunc"
Todas as funções criadas em JavaScript tem uma propriedade name
. =)
Espero tê-lo ajudado, meu caro!
Bons estudos!