尾戒

文章 评论 浏览 31

尾戒~ 2022-05-04 13:55:40

http://www.baidu.com
函数的形参是值传递的

感觉这么说不准确。对象传值传的是引用,但是引用是copy给函数形参。

// 这里把o改成a
// webSite引用地址的值copy给a了
function changeObjProperty(a) {
  // 改变对应地址内的对象属性值
  a.siteUrl = "http://www.baidu.com"
  // 变量a指向新的地址 以后的变动和旧地址无关
  a = new Object()
  a.siteUrl = "http://www.google.com"
  a.name = 456
} 
var webSite = new Object();
webSite.name = '123'
changeObjProperty(webSite);
console.log(webSite); // {name: 123, siteUrl: 'http://www.baidu.com'}
// 这里把o改成a
function changeObjProperty(a) {
  /**
   * JS 函数预编译(解析)
   * 
   * 1、执行前的一瞬间,会生成一个AO(action object)对象
   * 2、将函数内的形参和变量声明存储到AO对象中,值为undefined
   * 3、将实参和形参统一,形参作为AO对象的属性名,实参作为AO对象的属性值
   * 
   * ① AO = {}
   * 
   * ① 形成一个局部变量a(形参)
   *   AO = { a: undefined }
   * 
   * ② 把形参与实参结合,即局部变量a与外部变量webSite指向的是同一块堆内存
   *   AO = { a: o的引用地址 }
   */

  // 改变a对象里的值,即改变webSite对象中的值
  a.siteUrl = "http://www.baidu.com"

  // 更改局部变量a的引用,指向新的对象,之后与webSite对象无关
  a = new Object()
  a.siteUrl = "http://www.google.com"
  a.name = 456
} 

var webSite = new Object()
webSite.name = '123'
// 执行函数,把函数放入执行环境栈,进行函数预编译
changeObjProperty(webSite)
console.log(webSite) // {name: 123, siteUrl: 'http://www.baidu.com'}

第 98 题:写出如下代码的打印结果

尾戒~ 2022-05-04 13:54:30

如果依赖大量的计算的话,也可以采用纯函数的形式,将函数的计算结果缓存起来,只在第一次call的时候运行,之后的取值都从缓存里面拿

第 145 题:前端项目如何找出性能瓶颈

更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文