javaScript的问题

a 夏天 提交于 2019-12-20 04:25:25

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)
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!