zoukankan      html  css  js  c++  java
  • js中所有函数的参数(按值和按引用)都是按值传递的,怎么理解?

    我觉着我可能对这块有点误解,所以单独开个博说下自己的理解,当然是研究后的正解了。

    1,参数传递是基本类型,看个例子:

    function addTen(num){
        num += 10;
        return num;
    }
    
    var count = 20;
    var result = addTen(count);
    console.log(count,result); //20 30

    感觉这个都没啥好说的,基本类型传入函数后,函数内部参数生成一个参数副本,按值传入没毛病。

    2,引用类型(一个对象)当作参数传入函数后呢?

    function setName(obj){
        obj.name = 'miya';
    }
    var person = new Object();
    setName(person);
    console.log(person.name) //miya

    在这个例子里面,obj和person指向的是同一个对象,当obj上面添加name属性时候,外面的person也有所反应。那这就说明:参数是按引用传递进来的?不是的呦,它传递进来的数据其实是person的内存地址,所以说是按值传递的。因为修改了同一个内存,所以外面的person也变了。不信看下面的例子:

    function setName(obj){
        obj.name = 'miya';
        obj = new Object();
        obj.name = 'jone'
    }
    var person = new Object();
    setName(person);
    console.log(person.name); //miya

    唯一区别是在函数内部给obj对象重新赋值了一个对象,首先person的内存地址传递进来后,添加name属性,而后obj重新指向另外一个新对象,给新对象添加属性。所以现在obj引用的是另外一个局部对象了。person的name值仍然是miya。

    所以这里的“按值传递”的,引用类型传递进来传递的是它的内存数据(值)。

    可以把javascript的函数的参数想象成局部变量。

    【完】

    温故而知新,可以为师矣。

  • 相关阅读:
    C# Log4.Net日志组件的应用系列(二)
    C# Log4.Net日志组件的应用系列(一)
    使用TFS+GIT实现分布式项目管理
    动软代码生成器使用教程
    SVN使用教程
    windows系统重装流程
    使用纯真IP库获取用户端地理位置信息
    使用扩展方法重写.NET底层架构
    使用单例模式创建模型仓储层的唯一调用
    使用SQL Delta.v5.1.1.98.破解版同步数据结构
  • 原文地址:https://www.cnblogs.com/tangjiao/p/9953285.html
Copyright © 2011-2022 走看看