资讯专栏INFORMATION COLUMN

举三个列子,弄清楚js中值传递。

Big_fat_cat / 2472人阅读

摘要:值传递的典型这是典型的值传递的例子,只是把它的值给了局部变量,因此他们的存储是分开的,函数不会改变的值。看来的参数传递还是有点小复杂的。

预备知识 首先要明白基本类型和引用类型的区别: 基本类型:
var num1=5;
var num2=num1;

基本类型存储图

从他们的存储空间可知:num1和num2的存储是独立的,改变其中一个的值,另一个不会受到影响

引用类型:
var obj1=new Object();
var obj2=obj1;
obj1.name="Nicholas";
console.log(obj2.name);   //Nicholas

引用类型存储图

从他们的存储空间可知,改变其中一个的属性值,另一个的属性值也会改变。

值传递的典型
function addTen(num){
    return num+10;
}
var count=20;
var result=addTen(count);   
console.log(count);        //20
console.log(result);       //30

这是典型的值传递的例子,count只是把它的值给了局部变量,因此他们的存储是分开的,函数不会改变count的值。

传递引用类型也属于值传递
function setName(obj){
    obj.name="Nicholas";
}
var person=new Object();
setName(person);
console.log(person.name);          //Nicholas

咦?person对象的值已经改变了呀,为什么它还是值传递呢?
先让我们再来看一个例子吧:

function setName(obj){
    obj.name="Nicholas";
    obj=new Object();
    obj.name="Greg";
}
var person=new Object();
setName(person);
console.log(person.name);          //Nicholas

如果为引用传递:则在第二个例子中,person把它的地址给了局部obj,局部obj拥有了另一把可以进入person操作的钥匙,obj在第三行new的时候便会把person指向一个新的对象,person的名字将变为Greg,可是结果并非如此,所以不是引用传递。
person存储在堆中,是全局的,具有唯一性,person传值时,obj可以对他进行操作,可以理解为person给了obj钥匙,但是门的掌控权仍在person手中,obj不能再建一个新门。
看来js的参数传递还是有点小复杂的。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/91064.html

相关文章

  • 人工智能革命:人类会永生还是灭亡(上)

    摘要:但牛津哲大学哲学家兼首席人工智能科学家认为,我们可以将所有的结果归纳为两大类。认为,物种不朽与物种灭绝同样具有吸引人的状态,即如果我们能做到这一点,我们将永远不受灭绝的影响我们将拥有战胜死亡的机会。 showImg(https://segmentfault.com/img/remote/1460000019316706); 我们面临着一个非常困难的问题,在一个未知的时间内来解决它,而人...

    DevYK 评论0 收藏0
  • JS中的call(),apply()和bind()方法

    摘要:奔着一星期彻底弄清楚一个小知识点的目的这次的目标是方法在实际项目中经常会用到这三个函数只是简单的知道都是用来进行上下文绑定的这三个函数都可以实现现在看来这三者还是有很大区别的特别是和其他两个的区别先说和目的是改变函数的执行上下文下面列举一些 奔着一星期彻底弄清楚一个javascript小知识点的目的,这次的目标是call apply bind方法 在实际项目中,经常会用到这三个函数,只...

    nifhlheimr 评论0 收藏0
  • [译文] JavaScript工作原理:内存管理+如何处理4种常见的内存泄露

    摘要:本系列的第一篇文章着重提供一个关于引擎运行时和调用栈的概述。在硬件层面,计算机内存由大量的触发器组成。每个触发器包含几个晶体管能够存储一个比特译注位。可以通过唯一标识符来访问单个触发器,所以可以对它们进行读写操作。比特称为个字节。 原文 How JavaScript works: memory management + how to handle 4 common memory lea...

    adam1q84 评论0 收藏0
  • JavaScript 是传值调用还是传引用调用?

    摘要:所以传递给函数的值是这个值,所以函数执行结束原始变量并不会改变。传值调用在传值调用中,传递给函数参数是函数被调用时所传实参的拷贝。引用类型变量的值是一个指针,指向堆内存中的实际对象。所以传共享调用也可以说是传值调用。 1. 例子 先来看两个个来自于 《JavaScript 高级程序设计》P70-P71 的两个例子。 1.1. 基本类型参数传递 function addTen(num) ...

    darkbug 评论0 收藏0

发表评论

0条评论

Big_fat_cat

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<