传值类型_前端基础 | Javascript函数传值的方式

bfc5260e614f58ad365e55e07e71c54b.png

本文首发在个人博客上:

前端基础 | Javascript函数传值的方式​www.brandhuang.com

函数传值

《JavaScript高级程序设计》书中说: ECMAScript中所有函数的参数都是按值传递的。

按值传递

把函数外部的值复制给函数内部的参数,就和把值从一个变量复制到另一个变量一样。

基本数据类型

传递的是原始值本身

在函数中修改传入的值,不会影响原来的数据

var value = 1;
function foo(v) {
    v = 2;
    console.log(v); //2
}
foo(value);
console.log(value) // 1

复杂数据类型

传递的是对象的引用的副本,看下面两个例子,看看有什么不一样?

// 例子1
var obj = {
    value: 1
};
function foo(o) {
    o.value = 2;
    console.log(o.value); //2
}
foo(obj);
console.log(obj.value) // 2

// 例子2
var obj = {
    value: 1
};
function foo(o) {
    o = 2;
    console.log(o); //2
}
foo(obj);
console.log(obj.value) // 1

解释:

对于复杂的数据类型,函数内部的临时变量和传入的参数指向同一个内存地址,所以有例子一,我们能通过 o.value 找到内存中的 o,也就找到了外部的 obj,所以我们修改 o.value 值的时候,也会影响 obj 中的 value 值。

对于例子二,因为是直接对传入的参数进行了赋值操作,这会将内部参数 o 进行重新绑定,指向了一个新的地址,所以此时修改函数内部的值不会对外部有影响

参考文章

函数传递 - JavaScript中函数的参数传递方式都是按值传递 - SegmentFault 思否​segmentfault.com
641f205befd4a64c14088c8dd9ff43f2.png

感谢你的阅读

先就记录这几个知识点吧,多了一次性也记不住,大概率你也不会来看第二遍

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值