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

Posted 勇敢*牛牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面试集合(更)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

以上是关于面试集合(更)web前端经典面试题试题及答案JavaScript的主要内容,如果未能解决你的问题,请参考以下文章

常见的10道Web前端面试题及答案分享!

vue前端面试题

前端面试题

jQuery经典面试题及答案精选

jQuery经典面试题及答案精选(转)

经典PHP笔试题