Heim > Backend-Entwicklung > PHP-Tutorial > Problem mit dem Javascript-Bereich

Problem mit dem Javascript-Bereich

WBOY
Freigeben: 2023-03-01 21:58:01
Original
873 Leute haben es durchsucht

PHP-Code:

<code><?php
$key = [1,2];
function add($key){
    array_push($key,'dddss');
    print_r($key);
}
add($key);
print_r($key);</code>
Nach dem Login kopieren
Nach dem Login kopieren

Ausgabe

<code>Array
(
    [0] => 1
    [1] => 2
    [2] => dddss
)
Array
(
    [0] => 1
    [1] => 2
)
</code>
Nach dem Login kopieren
Nach dem Login kopieren

JS-Code:

<code>var $key = [1,2];
function addkey($key){
    let hello = $key;
    hello.push(9)
    console.log(hello)
    console.log($key)
}
addkey($key)
console.log($key)</code>
Nach dem Login kopieren
Nach dem Login kopieren

Ausgabe:

<code>[ 1, 2, 9 ]
[ 1, 2, 9 ]
[ 1, 2, 9 ]       
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Was ich möchte, ist, dass die Verarbeitung innerhalb der Funktion die Ergebnisse außerhalb der Funktion nicht beeinflusst, was den Ergebnissen von PHP ähnelt. Ich möchte auch den Grund wissen

Antwortinhalt:

PHP-Code:

<code><?php
$key = [1,2];
function add($key){
    array_push($key,'dddss');
    print_r($key);
}
add($key);
print_r($key);</code>
Nach dem Login kopieren
Nach dem Login kopieren

Ausgabe

<code>Array
(
    [0] => 1
    [1] => 2
    [2] => dddss
)
Array
(
    [0] => 1
    [1] => 2
)
</code>
Nach dem Login kopieren
Nach dem Login kopieren

JS-Code:

<code>var $key = [1,2];
function addkey($key){
    let hello = $key;
    hello.push(9)
    console.log(hello)
    console.log($key)
}
addkey($key)
console.log($key)</code>
Nach dem Login kopieren
Nach dem Login kopieren

Ausgabe:

<code>[ 1, 2, 9 ]
[ 1, 2, 9 ]
[ 1, 2, 9 ]       
</code>
Nach dem Login kopieren
Nach dem Login kopieren

Was ich möchte, ist, dass die Verarbeitung innerhalb der Funktion die Ergebnisse außerhalb der Funktion nicht beeinflusst, was den Ergebnissen von PHP ähnelt. Ich möchte auch den Grund wissen

let hello = $key.slice();

Ihr Funktionsparameter ist ein Array und Arrays werden als Referenz in js übergeben. . Wenn Sie „let inside“ in einer Funktion verwenden, um einer anderen Variablen einen Verweis auf ein Array zuzuweisen. Tatsächlich verweisen sowohl hello als auch $key gleichzeitig auf einen Wert, der in diesem Fall ein Array der Länge 2 ist. Wenn Sie also eine Push-Operation oder eine andere Operation für eine Variable ausführen, wird tatsächlich der Wert geändert, auf den beide Variablen gleichzeitig zeigen.

PHPs standardmäßiger eingehender Parameter ist eine Kopie, keine Referenz, aber JS übergibt immer eine Referenz, sodass Sie nur eine darin kopieren müssen, um sie zu ändern

<code class="javascript">var $keys = [1, 2];
function addkey($keys) {
    // 拷贝一份
    let hello = [].concat($keys);
    hello.push(9);
    console.log(hello);
    console.log($keys);
}
addkey($keys);
console.log($keys);</code>
Nach dem Login kopieren

Das Problem liegt in der Weitergabe durch Referenz. Eigentlich wird er in PHP erscheinen.

<code>$obj = new stdClass();
$obj->name = 'aa';
function change($o) {
    $o->name = 'bb';
}
change($obj);
echo $obj; // 'bb'</code>
Nach dem Login kopieren

Der Unterschied besteht darin, dass js-Arrays auch Objekte sind und auch als Referenz übergeben werden. Sie können nach „Objekt klonen“ suchen. Die Antwort auf diese Frage wurde oben gegeben.

Wenn PHP eingehende Parameter verwendet, bedeutet das Hinzufügen von & die Übergabe als Referenz, was dasselbe ist, als wenn Ihr JS-Code ausgeht

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage