English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Passagem por valor (call by value) é a estratégia de avaliação mais comum: os parâmetros formais são cópias dos argumentos passados ao chamar a função. A modificação do valor do parâmetro não afetará o argumento.
Na passagem por referência (call by reference), os parâmetros formais da função recebem uma referência implícita do argumento, em vez de uma cópia. Isso significa que se o valor do parâmetro formal for modificado, o argumento também será modificado. Ambos apontam para o mesmo valor.
Passagem por referência torna mais difícil o rastreamento de chamadas de função e às vezes pode causar alguns bugs subtis.
Passagem por valor, devido à necessidade de clonar cópias a cada vez, pode ser menos eficiente para tipos complexos. Ambos os métodos de passagem têm seus próprios problemas.
Os tipos básicos do JS, são passados por valor.
var a = 1; function foo(x) { x = 2; } foo(a); console.log(a); // ainda é1, não afetado por x = 2Atribuição afetada
Vamos ver novamente a passagem de objetos:
var obj = {x : 1}; function foo(o) { o.x = 3; } foo(obj); console.log(obj.x); // 3, foi modificado! var obj = {x : 1}; function foo(o) { o = 100; } foo(obj); console.log(obj.x); // Ainda é1, obj não foi modificado para100.
Pode-se ver que a passagem do valor do objeto não é passagem por referência. De fato, a passagem por compartilhamento (call by sharing), mais precisamente, os tipos básicos do JavaScript são passados por valor, os tipos de objeto são passados por compartilhamento (call by sharing, também chamado de passagem por objeto, passagem por objeto compartilhado).
O ponto focal dessa estratégia é: ao passar argumentos para a função, a função aceita uma cópia da referência do argumento de objeto (não é uma cópia de objeto passada por valor, nem uma referência implícita passada por referência). Ele é diferente da passagem por referência em que a atribuição do parâmetro formal da função não afeta o valor do argumento.
Em resumo, os tipos básicos são passados por valor, enquanto para objetos, o que é passado é o endereço de referência do objeto, também pode ser considerado uma passagem por valor especial. Se você operar as propriedades do objeto dentro da função, na verdade é operar as propriedades do objeto ao qual ele aponta. No entanto, se operar o objeto inteiro (por exemplo: o =), 100 ou o = []), na verdade, é novo definido um objeto, o endereço de referência do argumento de chamada é o endereço de referência do novo objeto, sem relação com o original, então não afetará o objeto original.
Aqui está o conhecimento completo介绍的JS é passada por valor ou por referência (recomendado) que o editor apresentou para você, esperando que ajude. Se você tiver alguma dúvida, é bem-vindo a deixar um comentário, o editor responderá a você o mais rápido possível. Agradecemos também o apoio ao site tutorial de clamor!
Declaração: O conteúdo deste artigo é de origem na Internet, pertence ao respectivo detentor dos direitos autorais, foi submetido e carregado voluntariamente pelos usuários da Internet, este site não possui direitos de propriedade, não foi editado manualmente e não assume responsabilidade legal relevante. Se você encontrar conteúdo suspeito de violar direitos autorais, bem-vindo a enviar e-mail para: notice#oldtoolbag.com (ao enviar e-mail, substitua # por @ para denunciar e forneça provas. Se confirmado, o site deletará imediatamente o conteúdo suspeito de infringir direitos autorais.)