红宝书中是这样说的
- 基本数据类型传递的是值
/**
* 全局作用域、函数变量、函数内部作用域
*
*/
let a = 10
let b = 1
function sum(a, b){
a = 11
b = 2
console.log(a) // 11
console.log(b) // 2
}
console.log(a) // 10
console.log(b) // 1
// 记住, 普通数据类型传递的是参数的值,不是参数的地址,所以,不会修改参数真正的数据
sum(a, b)
console.log(a); // 10
console.log(b); // 1
- 引用数据类型传递的也是值, 不过这个值是一个地址指针
/**
* 引用数据类型和参数传递的是值还是指针
*/
// 引用数据类型作为参数, 传递的还是值, 但是这个值是引用数据类型的第一个地址。
const objCK = {name: 'ck'}
function setName(obj) {
obj.name = 'kb'
// 将obj引用指针指向了新的一个对象上
obj = new Object()
obj.name = 'new'
}
console.log(objCK.name) // ck
setName(objCK)
// 如果这里是按照引用传递,那么,下面的输出应该是new
console.log(objCK.name) // kb