问题描述:下面代码中 var c=a.b;c(),c()在全局中调用,this指向window,而window下并没有定义name变量,为什么全局调用c()输出的是1而不是undefined
var a={
name:2,
b:function(){
this.name++
console.log(this.name)
}
}
a.b()//3
var c=a.b
c()//1
问题描述:下面代码中 var c=a.b;c(),c()在全局中调用,this指向window,而window下并没有定义name变量,为什么全局调用c()输出的是1而不是undefined
var a={
name:2,
b:function(){
this.name++
console.log(this.name)
}
}
a.b()//3
var c=a.b
c()//1
13 回答12.9k 阅读
7 回答2.1k 阅读
3 回答1.3k 阅读✓ 已解决
2 回答1.3k 阅读✓ 已解决
6 回答1.2k 阅读✓ 已解决
6 回答1.1k 阅读
2 回答1.3k 阅读✓ 已解决
window
对象本身就有name
属性,表示窗口的名字,默认是空字符串""
,类型是字符串
类型。如果给window
的name
属性赋值的时候不是字符串类型,就会强制
转化为字符串类型。执行
c()
的时候,this
指向window
,也就是window.name
默认是""
,空字符串执行自增操作变成1
,因为赋值给window.name
所以会强制转化为字符串,也就是此时window.name
为"1"
。