2020面试准备5----堆栈内存题和闭包作用域的题

1.第一道

let a = {},
	b = '0',
	c = 0
a[b] = '张三'
a[c] = '李四'
console.log(a[b])//李四

原因:一个对象中的属性名不能重复,属性名一般都是字符串,在这里,字符串‘0’和数字0是一样的

2.第二道

let a = {}
	b = Symbol('1')
	c = Symbol('1')
a[b] = '张三'
a[c] = '李四'
console.log(a[b])//张三

原因:Symbol创建唯一值

3.第三道

let a = {},
b = {
	n:'1'
},
c = {
	m:'2'
}
a[b] = '张三'
a[c] = '李四'
console.log(a[b])//李四

对象转为字符串后都是[Object object]
2020面试准备5----堆栈内存题和闭包作用域的题_第1张图片
因此无论是对象b还是对象c作为属性名,都会转化成[Object object],
a[b] = a[’[Object object]’] = '李四‘

4.第四题

var test = (function(i){
	return function () {
		alert(i*=2)
	}
})(2)
test(5)//'4'

注意:alert()弹出来的结果都要toString()一下,输出的是字符串
2020面试准备5----堆栈内存题和闭包作用域的题_第2张图片
5.第五题

var a = 0,
	b = 0
function A(a){
	A = function(b){
		alert(a + b++)
	} 
	alert(a++)
}
A(1)//'1'
A(2)//'4'

2020面试准备5----堆栈内存题和闭包作用域的题_第3张图片

你可能感兴趣的:(前端面试)