Posted by & filed under 每日一题.

【四脚猫】每日一题(11月19日):关于“JS函数的参数是否可以引用传递?”,昨天 Zjmainstay 给出了代码:

1
2
3
4
function test(user) {  user['age'] = '24';}
var my = {  name : 'Zjmainstay'}
test(my);
console.log(my);

控制台输出:{name: “Zjmainstay”, age: “24”}

看这效果,貌似就是引用传递的。那么将此代码小小修改后

1
2
3
4
function test(user) {  user = {  name : 'sijiaomao'};}
var my = {  name : 'Zjmainstay'}
test(my);
console.log(my);

如果是引用传递,控制台输出 {  name : ‘sijiaomao’} 才是符合预期的。但为何不是呢?

参考答案:

 wuhen和Zjmainstay解释都不错。这里想告诉大家的是,js当中没有引用传递。对象类型的变量,其实是一个指向该对象的指针,该指针传递给函数后,会值传递形成一个新的指针,这个指针默认也是指向该对象。所以代码1的方式会导致该对象发生变化,代码2的方式是把新指针指向了一个局部作用域的新对象,和原来的对象没有关系。

 

欢迎各位攻城狮,各位大牛给每日一题投稿,大家可以把自己碰到的有趣问题,工作中碰到的难题等…发送到 稿件邮箱:2313427189@qq.com