Nos conceitos tradicionais, acredita -se que as funções de JavaScript passem por passagem de referência (também chamada de aprovação de ponteiro), e algumas pessoas acreditam que a passagem de valor e a passagem de referência estão disponíveis. Então, o que está acontecendo com a passagem do parâmetro JS? De fato, a manifestação a seguir pode ser usada em java
Primeiro, vamos obter um tipo básico de entrega mais simples:
função add (num) {num+= 10; retornar num;} num = 10; alert (add (num)); aelrt (num); // saída 20,10Para as saídas 20 e 10 aqui, de acordo com a explicação oficial do JS, uma ação de cópia é feita quando os parâmetros do tipo básico são passados, de modo que o número variável declarado externamente e o parâmetro de função num tenha exatamente o mesmo valor, mas tenham endereços de parâmetros completamente diferentes. Ninguém se conhece, e o parâmetro de função NUM FORCULHO STAME STIPS quando a chamada de função retorna. Portanto, alterar o parâmetro de função NUM não tem efeito nas variáveis externas originais.
Vejamos um passe de referência de objeto mais complexo:
função setName (obj) {obj.name = "ted";} var obj = new Object (); setName (obj); alert (obj.name); // saída tedThe essence of the above code is: create an object object, assign it reference to obj (in C, it is directly an assignment of a memory address), and then when passing the function parameters, I did the same thing as the previous method, copied a stack frame to obj of the function parameter, and both have the same value (it may be understood as the address of the object object), and then when changing the setName, the value of the object object itself (called a variable class in Java) e, após a conclusão da alteração, o quadro da pilha correspondente ao parâmetro de função OBJ também deve ser exibido.
Portanto, a saída correspondente é o valor do objeto após a alteração
Então alguns amigos podem perguntar: isso também pode ser entendido como um passe de referência (Pointer Pass)? Não, estritamente falando, em idiomas semelhantes ao Java, não há indicadores. Em Java, o processo acima é chamado de processo de análise, desde referência simbólica à referência direta. Em C, um ponteiro é um tipo com um comprimento fixo (2 bytes na maioria dos compiladores C), mas em idiomas similares Java, as referências também têm suas próprias propriedades e métodos, mas você não pode acessar e controlá -lo diretamente, por isso também é um objeto. Esse mecanismo também evita muito o vazamento de memória e o termo é chamado de mecanismo de acesso estruturado pela memória.
Para provar o ponto acima, o exemplo acima é ligeiramente modificado:
function setName (obj) {obj.name = "ted"; obj = new Object (); obj.name = "Mary";} var obj = new Object (); setName (obj); alerta (obj.name); // saída tedA única diferença entre este exemplo e o exemplo anterior é que um novo objeto é atribuído ao parâmetro de função OBJ, para que o parâmetro de função obj e o parâmetro OBJ de referência original tenham valores e endereços de memória completamente diferentes.
O artigo acima fala brevemente sobre se a passagem de parâmetros da função JavaScript é a passagem de valor ou a passagem de referência é todo o conteúdo que compartilhei com você. Espero que possa lhe dar uma referência e espero que você possa apoiar mais o wulin.com.