0
点赞
收藏
分享

微信扫一扫

【面试集合(更)】web前端经典面试题试题及答案JavaScript


地址空间的坑

代码:

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 条评论