this绑定知识
var name = 'global'
var obj = {
name:'local',
foo:function(){
this.name = 'foo'
}.bind(window)
}
var bar = new obj.foo()
setTimeout((function(){
console.log(window.name)
}),0)
console.log(bar.name)
var bar3 = bar2 = bar
bar2.name = "foo2"
console.log(bar3.name)
解析
foo
foo2
global
主要是这句 var bar = new obj.foo()
这涉及到隐性绑定,硬绑定和new绑定
new绑定会使得this不管之前绑定了什么,this都会绑定给new的对象上
所以bar.name = this.name = ‘foo’
var bar3 = bar2 = bar复制的是bar地址
所以bar2修改name就是修改了this.name
所以bar3.name = ‘foo2’
setTimeout()不管什么时间都会最后出来