我有两个类似的代码,它们要么通过引用传递,要么根据不同的情况传递值,如下所示:
示例 1
var numbers = [1,2,3];
function popper(){
var popped = numbers.pop();
return popped;
}
console.log(numbers,popper());
示例 2
function numbers(){
var arry = [1,2,3];
return arry;
}
function popper(){
var popped = numbers().pop();
return popped;
}
console.log(numbers(),popper());
我读到只有原语是按值传递的,其他是按引用传递的。但是,在示例 1 中,numbers 数组是按值传递的,而在示例 2 中,包含相同数组的numbers() 函数是按引用传递的。任何对内部发生的事情的描述都会很棒。
额外问题:有什么方法可以查看两个示例中数字的数组原型(prototype)吗?
最佳答案
这其实逻辑上是一致的。 JavaScript 将始终通过引用传递数组。在示例 2 中,当您再次在 console.log(...
内调用 numbers()
时,实际上创建了一个新数组。
此外,您实际上并没有传递变量,而只是使用范围。要实际传递数组,您需要执行以下操作:
var numbers = [1,2,3];
function popper(nums2){
var popped = nums2.pop();
return popped;
}
console.log(numbers,popper(numbers));
一步一步:
示例 1
- 定义
数字
- 调用
popper()
,这将修改数字
- 登录控制台
示例 2
- 调用
popper()
- 在
popper()
中调用numbers()
,返回一个数组 popper()
修改上面的数组- 再次调用
console.log(...
行中的numbers()
numbers()
现在创建一个新数组并将其返回到console.log(
关于Javascript 奇怪的 Pass-by-X 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41485467/