练习向------web前端经典面试题试题及答案

地址空间的坑

代码:

unction fn(obj) {	
	obj.name = 'Rose'
	obj = new Object()
	obj.name = 'Tom'
}
var obj = { name: 'Jack' }
fn(obj)
console.log(obj.name) // Rose

解析:

function fn(obj) {
	// 此时 形参obj 存储的内容就是 空间地址(xf001)
	// 利用 形参obj 修改 name 属性的值
	// 把 全局obj 这个空间内的 name 修改为 Rose 了
	obj.name = 'Rose'
	
	// 此时给 形参obj 从新赋值为一个新的对象空间地址(xf002)
	obj = new Object()
	// 此时 形参obj 修改name 属性修改的是 xf002 地址内的 name
	// 不影响 全局obj
	obj.name = 'Tom'
}
// 全局obj 被赋值为一个对象空间地址(xf001), 内部存储一个 name:'Jack'
var obj = { name: 'Jack' }
// 调用 fn , 把 全局obj 传递进去, 真实给进去的是 空间地址(xf001)
fn(obj)
console.log(obj.name) // Rose

赋值的坑

function fn(obj) {
	// 本身私有空间内存在一个私有变量 obj, 接受的值是 全局obj(xf001)
	 // 预解析阶段, 声明一个 obj 变量, 没有意义
	 obj.name = 'Rose'
	 var obj = new Object()
	 obj.name = 'Tom'
}
var obj = { name: 'Jack' }
fn(obj)
console.log(obj.name) // Rose
 // 面试题
    function fn() {
      // 在函数内代码执行之前, 会进行预解析
      // 在 fn 空间内声明一个私有变量, 叫做 obj, 但是没有赋值, 此时 obj 是 undefined

      // 执行代码
      // obj.name = 'Rose'
      // 此时 obj 是 undefined, 你执行的就是 undefined.name = 'Rose'
      obj.name = 'Rose'
      var obj = new Object()
      obj.name = 'Tom'
    }
    var obj = { name: 'Jack' }
    fn(obj)
    console.log(obj.name)//报错
// 面试题
function fn() {
	// 此时 obj 就是 全局obj(xf001)
	// 给 全局obj 内修改 name 属性
	obj.name = 'Rose'
	// 给 全局obj 从新赋值为一个新的对象(xf002)
	obj = new Object()
	// 给 全局obj(xf002) 赋值一个 name 属性为 Tom
	obj.name = 'Tom'
}
var obj = { name: 'Jack' }
fn(obj)

// 打印的是全局obj
// 因为 fn 函数的执行, 把全局obj 修改为了 (xf002)
console.log(obj.name)//Tom
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值