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

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

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

用汇编代码表示:

  1. n -> 0x002233  
  2. Heap: Stack:  
  3. 002254 012222  
  4. ... 012223 0x002233  
  5. 002240 012224  
  6. 002239 012225  
  7. 002238  
  8. 002237  
  9. 002236  
  10. 002235  
  11. 002234  
  12. 002233 { number: 90 }  
  13. 002232  
  14. 002231 { number: 30 }  
  15. Code:  
  16. ...  
  17. 000233 main: // entry point  
  18. 000234 push n // n 值为 002233 ,它指向堆中存放 {number: 90} 地址。 n 被推到堆栈的 0x12223 处.  
  19. 000235 ; // 保存所有寄存器  
  20. ...  
  21. 000239 call sum ; // 跳转到内存中的`sum`函数  
  22. 000240  
  23. ...  
  24. 000270 sum:  
  25. 000271 ; // 创建对象 {number: 30} 内在地址主 0x002231  
  26. 000271 mov 0x002231, (ebp+4) ; // 将内存地址为 0x002231 中 {number: 30} 移动到堆栈 (ebp+4)。(ebp+4)是地址 0x12223 ,即 n 所在地址也是对象 {number: 90} 在堆中的位置。这里,堆栈位置被值 0x002231 覆盖。现在,num1 指向另一个内存地址。 
  27. 000272 ; // 清理堆栈  
  28. ...  
  29. 000275 ret ; // 回到调用者所在的位置(000240)  

我们在这里看到变量n保存了指向堆中其值的内存地址。 在sum 函数执行时,参数被推送到堆栈,由 sum 函数接收。

(编辑:西安站长网)

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

热点阅读