标签:obj name person JS 传递 函数参数 参数 Nicholas
ECMAScript 中所有函数的参数都是按值传递的。
也就是说,把函数外部的值复制给函数内部的参数(值从一个变量复制到另一个变量一样)。
代码验证
向参数传递基本类型
function addTen(num) {
num += 10;
}
var count = 20;
addTen(count);
alert(count); //20,没有变化; 如果是按引用传递的会变成 30
向参数传递引用类型
function setName(obj) {
obj.name = "Nicholas";
obj = new Object(); // **重点:如果按引用传递,外部参数会被重新赋值。
obj.name = "Greg";
}
var person = new Object();
setName(person);
alert(person.name); //"Nicholas" ; 如果是按引用传递的会变成 "Greg"
代码解读:
- 外部变量
person
对象的地址值,复制给内部参数obj
(值传递),而不是“直接引用该地址值”(引用传递) - 修改 obj.name = "Nicholas" // 因为
obj
复制了person
的地址,所以person.name
变成了"Nicholas" - obj = new Object(); // 内部参数
obj
重新赋值,指向新的对象。 - obj.name = "Greg"; // 因为内部参数
obj
不再指向person
的地址,所以person.name
任然为"Nicholas"
总结
简单地说(个人理解),
按值传递参数就是,在函数内部,新建一个变量,复制传入的参数。
按引用传递就是,函数内部的形参,直接引用这个实参。对形参的任何修改,就是直接在这个实参上的修改。
参考
《JavaScript高级程序设计》.第3版 4.1.3 传递参数
标签:obj,name,person,JS,传递,函数参数,参数,Nicholas 来源: https://www.cnblogs.com/huangtq/p/15544599.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。