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的函数的参数想象成局部变量。

    【完】

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

  • 相关阅读:
    PDF太大怎么办?缩小PDF的4种常用方法
    电脑插上网线无法连接网络完美解决方案
    HTTP攻击与防范-跨站攻击-01简介
    HTTP攻击与防范-跨网站脚本攻击
    HTTP攻击与防范-PHP客户端脚本攻击
    HTTP攻击与防护-函数注入攻击
    HTTP攻击与防范-命令注入攻击
    重置NSX防火墙策略
    NBU8.1安装
    Vcenter由Win2008r2迁移到linux
  • 原文地址:https://www.cnblogs.com/tangjiao/p/9953285.html
Copyright © 2011-2022 走看看