加入收藏 | 设为首页 | 会员中心 | 我要投稿 西安站长网 (https://www.029zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 建站 > 正文

JavaScript是如何工作的:JavaScript的共享传递和按值传递

发布时间:2019-04-19 16:36:19 所属栏目:建站 来源:前端小智
导读:副标题#e# 关于JavaScript如何将值传递给函数,在互联网上有很多误解和争论。大致认为,参数为原始数据类时使用按值传递,参数为数组、对象和函数等数据类型使用引用传递。 按值传递 和 引用传递参数 主要区别简单可以说: 按值传递:在函数里面改变传递的

JavaScript 在执行期间为程序分配了三部分内存:代码区,调用堆栈和堆。 这些组合在一起称为程序的地址空间。

JavaScript是如何工作的:JavaScript的共享传递和按值传递

代码区:这是存储要执行的JS代码的区域。

调用堆::这个区域跟踪当前正在执行的函数,执行计算并存储局部变量。变量以后进先出法存储在堆栈中。最后一个进来的是第一个出去的,数值数据类型存储在这里。

例如:

  1. var corn = 95  
  2. let lion = 100 

在这里,变量 corn 和 lion 值在执行期间存储在堆栈中。

堆:是分配 JavaScript 引用数据类型(如对象)的地方。 与堆栈不同,内存分配是随机放置的,没有 LIFO策略。 为了防止堆中的内存漏洞,JS引擎有防止它们发生的内存管理器。

  1. class Animal {}  
  2. // 在内存地址 0x001232 上存储 new Animal() 实例  
  3. // tiger 的堆栈值为 0x001232  
  4. const tiger = new Animal()  
  5. // 在内存地址 0x000001 上存储 new Objec实例  
  6. // `lion` 的堆栈值为 0x000001  
  7. let lion = {  
  8. strength: "Very Strong"  
  9. }    
JavaScript是如何工作的:JavaScript的共享传递和按值传递   

Here,lion 和 tiger 是引用类型,它们的值存储在堆中,并被推入堆栈。它们在堆栈中的值是堆中位置的内存地址。

激活记录(Activation Record),参数传递

我们已经看到了 JS 程序的内存模型,现在,让我们看看在 JavaScript 中调用函数时会发生什么。

  1. // 例子一  
  2. function sum(num1,num2) {  
  3. var result = num1 + num2  
  4. return result  
  5. }  
  6. var a = 90  
  7. var b = 100  
  8. sum(a, b)  

每当在 JS 中调用一个函数时,执行该函数所需的所有信息都放在堆栈上。这个信息就是所谓的激活记录(Activation Record)。

这个 Activation Record,我直译为激活记录,找了好多资料,没有看到中文一个比较好的翻译,如果朋友们知道,欢迎留言。

(编辑:西安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读