javaScript的问题

js 中的值传递和引用传递

js 函数传参的时候,如果是基本类型,则按值传递,如果是引用类型,则是引用传递(按地址传递)

var num = 1
function foo(num) {
    num = num + 1
    return num
}
foo(num) // 2
num // 1
function changeAgeImpure(person) {
    person.age = 25;
    return person;
}
var alex = {
    name: "Alex",
    age: 30
};
var changedAlex = changeAgeImpure(alex);
console.log(alex); // { name: 'Alex', age: 25 }
console.log(changedAlex); // { name: 'Alex', age: 25 }
function changeAgeAndReference(person) {
    person.age = 25; // 按址传递,会修改对象
    // 一个新对象,指向另一个内存地址
    person = {
        name: "John",
        age: 50
    };

    return person;
}
var personObj1 = {
    name: "Alex",
    age: 30
};
var personObj2 = changeAgeAndReference(personObj1);
console.log(personObj1); // {name: "Alex", age: 25}
console.log(personObj2); // {name: "John", age: 50}
js 基础类型的属性赋值问题

在 js 中,变量的类型一旦被声明为基础类型,如果再为基础类型的变量添加属性,则其新建的属性不可存储,会自动销毁。
流程如下:

  1. 首先将基础类型临时转换为 Object 类型,并备份好基础类型的值;
  2. 为 Object 类型添加属性;
  3. 属性赋值完成后,再将 Object 转换为基本类型,并恢复为原值,并将临时对象销毁;
let num = 1
let obj = Object(num)
obj.a = 1
Number(obj) // 1
let num = 1
num.name = '123'
console.log(num.name) // undefined
var b = 10;
(function b(b) {
 b.b = 20;
 console.log(b) // 10
})(b)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值