文章 评论 浏览 31
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'}
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'}
如果依赖大量的计算的话,也可以采用纯函数的形式,将函数的计算结果缓存起来,只在第一次call的时候运行,之后的取值都从缓存里面拿
文章 0 评论 0
接受
第 98 题:写出如下代码的打印结果