猿问

javascript作用域问题

PHP代码:

<?php$key = [1,2];function add($key){
    array_push($key,'dddss');
    print_r($key);
}
add($key);
print_r($key);

输出

Array
(
    [0] => 1
    [1] => 2
    [2] => dddss
)
Array
(
    [0] => 1
    [1] => 2)

JS代码:

var $key = [1,2];
function addkey($key){    let hello = $key;
    hello.push(9)
    console.log(hello)
    console.log($key)
}
addkey($key)
console.log($key)

输出:

[ 1, 2, 9 ]
[ 1, 2, 9 ]
[ 1, 2, 9 ]

我想要的是函数内的处理不影响函数外,也就是类似于PHP的结果,也想知道什么原因


牛魔王的故事
浏览 524回答 1
1回答

慕仙森

let hello = $key.slice();你的函数参数是一个数组,而数组在js中是按照引用来传递的。。你在函数内部使用let 将一个数组的引用赋值给另一个变量的时候。实际上,hello和$key都同时指向了一个值,在这里就是length为2的数组。所以你对任何一个变量做push或者其他操作的时候,改变的其实是两个变量同时指向的那个值。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答