您的位置:首页 > Web前端 > JavaScript

js参数是按什么传递的

2016-07-11 15:13 357 查看
本文内容为阅读博文baidu.com后总结而得,其中代码示例均引用自该博文

基本类型的传递

按值传递。也就是说,调用函数时,其形参为实参的副本,修改形参并不会影响传入的实参值。
var a = 1;
function foo(x) {
x = 2;
}
foo(a);
console.log(a); // 仍为1, 未受x = 2赋值所影响

对象类型的传递

按共享传递。也就是说,形参为实参引用的副本。当直接修改引用时,不会应该实参值,但引用副本与引用所指向的对象是相同的,所以当我们修改实参对象的具体属性时,会同样修改实参的值。
var obj = {x : 1};
function foo(o) {
o = 100;
}
foo(obj);
console.log(obj.x); // 仍然是1, obj并未被修改为100.
var obj = {x : 1};
function foo(o) {
o.x = 3;
}
foo(obj);
console.log(obj.x); // 3, 被修改了!


基本类型和对象的修改

基本类型的值其实是不能修改的,我们每次对基本类型修改时,并非真的修改,而是生成了一个新的基本类型对象。
var str = "abc";
str[0]; // "a"
str[0] = "d";
str; // 仍然是"abc";赋值是无效的。没有任何办法修改字符串的内容


对象的值是可以修改的
var obj = {x : 1};
obj.x = 100;
var o = obj;
o.x = 1;
obj.x; // 1, 被修改
o = true;//由于对象是按照共享传递的,o是obj引用的一个副本,所以修改的也是该副本,而非obj
obj.x; // 1, 由于该的只是引用副本的内容,并未修改引用副本所指向的内容,故不会因o = true改变
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: