1. JavaScript 中基础类型变量时按照值传递,即 Number、Symbol、String、Boolean、Undefined、Null
引用类型变量按照引用传递,即Object
2. JavaScript 中函数参数都是按照值传递的,然而有些人可能会对下面例子有所误解,认为其是引用传递:
function test(object) { object.name = "Nicolas"; } let obj = { name: 'Sandy' }; console.log(obj); // { name: 'Sandy' } test(obj); console.log(obj); // { name: 'Nicolas' }
可以看到在经过 test 函数后,obj 的属性值改变了,所以就有人认为既然函数参数值的改变影响到了全局变量中对象属性值的改变,它就是按引用传递,但这是错误的。在这个例子中传递的是一个地址值,object 参数和全局中的 obj 所指向的地址一样,因此会互相影响。如果我们改变了 object 参数的地址,那么如果全局中地址也改变了,说明是按引用传递:
function test(object) { object.name = "Nicolas"; object = { // 此处改变了地址值 name: "Brownia" }; } let obj = { name: 'Sandy' }; console.log(obj); // { name: 'Sandy' } test(obj); console.log(obj); // { name: 'Nicolas' }
如果是按引用传递,理想的结果打印输出应为 { name: 'Brownia' } 但是仍然是 Nicolas,所以如题,JavaScript 函数参数均是按值传递。