实例浅析javascript call by value与call by reference

基本类型是call by value的

var value = 1
console.log(value);
func(value);
console.log(value);

function func(val){
  val = 3;
  console.log(val);
}
输出:
1
3
1

对象和数组call by reference,
即可以修改对象中的属性
var arr_val = [ 1, 2, 3]; 
var obj_val = {
  width : 3,
  height : 5
};
(obj_val.width == 3) ? console.log( 'yes') :console.log( 'no');
(arr_val[ 2] == 3) ? console.log( 'yes') :console.log( 'no');
func(arr_val, obj_val);
console.log(arr_val, obj_val);
function func(arr_val, obj_val){
  arr_val[ 2] = 100;
  obj_val.width = 100;
  console.log(arr_val, obj_val);
}
输出:
yes
yes
[1, 2, 100] {width:100, height:5}
[1, 2, 100] {width:100, height:5}
注:由于console.log()输出的是对象最后稳定的值,
故一开始用如上语法

也可以理解为对象和数组call by value的内容是引用
所以可以修改对象的属性,但不能修改引用本身
var arr_val = [ 1, 2, 3]; 
var obj_val = {
  width : 3,
  height : 5
};
console.log(arr_val, obj_val);
func(arr_val, obj_val);
console.log(arr_val, obj_val);
function func(arr_val, obj_val){
  arr_val = [ 0, 0, 0];
  obj_val = { newAttribute : 1 };
  console.log(arr_val, obj_val);
}
输出:
[1,2,3]  {width:3, height:5}
[0,0,0] { newAttribute:1 }
[1,2,3]  {width:3, height:5}
 
值得注意的是,string类型
是不能改变其值的。
更多javascript字符串的内容,
可以参考javascript: the definitive guide
var str_val = 'string'
console.log(str_val[ 0]);
str_val[ 0] = 'a';
console.log(str_val[ 0]);
输出:
s
s

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值