鍍金池/ 問答/HTML/ 為什么沒有定義全局變量,卻能打印出數(shù)字

為什么沒有定義全局變量,卻能打印出數(shù)字

問題描述:下面代碼中 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
回答
編輯回答
膽怯
this指向window,而window下并沒有定義name變量

???
window.name了解下

2017年10月27日 19:48
編輯回答
來守候

window對象本身就有name屬性,表示窗口的名字,默認是空字符串"",類型是字符串類型。如果給windowname屬性賦值的時候不是字符串類型,就會強制轉化為字符串類型。
執(zhí)行c()的時候,this指向window,也就是

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

window.name默認是"",空字符串執(zhí)行自增操作變成1,因為賦值給window.name所以會強制轉化為字符串,也就是此時window.name"1"。

2017年12月22日 12:55
編輯回答
念初

var c=a.b的時候,this指向的是window,所以window下定義了一個全局的name

2017年10月15日 20:45