- 第一题
var color = 'green'
var test = {
color: 'red',
getColor: function() {
var color = 'black'
console.log(this.color)
}
}
var t1 = test.getColor
t1()
test.getColor() //this指向test
解析:var t1 = test.getColor
即
var t1 = function() {
var color = 'black'
console.log(this.color)
}
执行t1()函数时,this指向window
知识点一:js函数调用时加括号与不加括号的区别
知乎
加括号:调用该函数,返回值为函数返回值
不加括号:查看函数信息,返回值为整个函数信息
知识点二:this的指向问题
参考博客
始终指向调用它的对象
- 第二题
function test1() {
var n = 4399
function add() {
n++
console.log(n)
}
return { n: n, add: add } //一个匿名对象 n基本类型 add引用类型
}
var result = test1()
var result2 = test1()
result.add() // 4400
// result2.add() //4401
console.log(result.n) //4399
// result2.add() //4400
解析:var result = test1()
这里得到return值,并将该值存放在堆内存中,此时n=4399; var result2 = test1()
存储在另一个堆内存,result和result2相互独立
属性add存储的add是引用类型,会随着函数的多次调用而改变结果值
当result.add()
调用时返回4400;result2.add()
返回4401
属性n存储的n是基本数据类型,值保持不变。console.log(result.n)
返回4399
最后result2.add()
result和result2指向两个不同的对象,有不同的作用域链,返回4400