为什么没有定义全局变量,却能打印出数字

问题描述:下面代码中 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
阅读 2.3k
3 个回答

window对象本身就有name属性,表示窗口的名字,默认是空字符串"",类型是字符串类型。如果给windowname属性赋值的时候不是字符串类型,就会强制转化为字符串类型。
执行c()的时候,this指向window,也就是

window.name++
console.log(window.name)

window.name默认是"",空字符串执行自增操作变成1,因为赋值给window.name所以会强制转化为字符串,也就是此时window.name"1"

var c=a.b的时候,this指向的是window,所以window下定义了一个全局的name

this指向window,而window下并没有定义name变量

???
window.name了解下

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题