zoukankan      html  css  js  c++  java
  • 传值和传引用

    变量可能包含两种不同数据类型的值:基本类型值和引用类型值。基本类型值指的是简单的数据段,引用类型值指那些可能由多个值构成的对象。

    5种基本数据类型:NULL undefined  Boolean String Number是按值访问的,因为可以操作保存在变量中的实际值。

    引用类型的值是保存在内存中的对象。JS不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间。在操作对象时,实际上是在操作对象的引用而不是实际的对象。引用类型的值是按引用访问的。

    1)基本类型值在内存中占据固定大小的空间,因此被保存在栈内存中;引用类型的值是对象,保存在堆内存中,包含引用类型值得变量实际上包含的并不是对象本身,而是一个指向该对象的指针;

    2)确定一个值是哪种基本类型可以使用typeof操作符,而确定一个值是哪种引用类型可以使用instanceof操作符。

    3)不能给基本类型的值添加属性;只能给引用类型的值动态添加属性;

    4)复制变量值。基本数据类型:如果从一个变量向另一个变量复制基本类型的值,会在变量对象上创建一个新值,然后把该值复制到为新变量分配的位置上。

    var num1=5;  var num2=num1;  num2中的5与num1中的5是完全独立的,该值只是num1中的5的一个副本。此后,这两个变量可以参与任何操作而不会相互影响。

    引用类型:当从一个变量向另一个变量复制引用类型的值时,同样也会将存储在变量对象中的值复制一份到新变量分配的空间。不同的是,这个值得副本实际上是一个指针,而这个指针指向存储在堆中的一个对象。复制操作结束后,两个变量实际上引用同一个对象。因此改变其中一个变量,就会影响另一个变量。

    var obj1=new Object();  var obj2=obj1;  obj1.name="Nicholas";  alert(obj2.name)//Nicholas

    obj1和obj2都指向同一个对象,这样当为obj1添加Name属性后,可以通过obj2来访问这个属性,因为这两个变量引用的都是同一个对象。

    5)传递参数。JS中所有函数的参数都是按值传递的。把函数外部的值复制到函数内部的参数,就和把值从一个变量复制到另一个变量一样。基本类型值得传递如同基本类型变量的复制一样,而引用类型值得传递则如同引用类型变量的复制一样。

    基本类型:向参数传递基本类型的值时,被传递的值会被复制给一个局部变量(即命名参数);

    引用类型:向参数传递引用类型值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映到函数外部。

    function setName(obj){

      obj.name='Nicholas';

      obj=new Object();

      obj.name='Greg';

    }

    var person=new Object();

    setName(person);

    alert(person.name)//Nicholas

    在这个函数内部,obj和person一开始引用的是同一个对象。obj会按引用来访问同一个对象,于是当在函数内部为obj添加name属性后,函数外部的person也将有所反映;因为person指向的对象在堆内存中只有一个,而且是全局对象。然后,又将一个新对象赋给变量obj,同时将其name属性设置为Greg。如果person是按引用传递的,那么person就会自动修改为指向其name属性值为greg的新对象。但是接下来再访问person.name时,显示的值仍然是Nicholas。说明即使在函数内部修改了参数的值,但原始引用任然保持不变。实际上,当在函数内部重写obj时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁。

  • 相关阅读:
    jmeter-可视化的非GUI模式
    深度剖析阶梯负载与最终请求数
    安全测试基础2-sqlmap演练
    百度压测,分析性能拐点
    性能测试-服务端瓶颈分析思路
    性能测试中的常见异常分析(转载整理)
    jmeter_遍历转换浮点时间戳
    性能测试-实例讲解VU、RPS、RT公式换算
    利用Docker安装Web前端性能测试工具Sitespeed.io
    基于 Jmeter 的 web 端接口自动化测试平台(转载)
  • 原文地址:https://www.cnblogs.com/YangqinCao/p/5406230.html
Copyright © 2011-2022 走看看