var i='全域變數';
let obj={
i:'obj內變數 obj屬性',
fun:function (){
console.log(i)
console.log(this)
console.log(this.i)}
}
obj.fun();
console.log('.......................................')
let aNewFunction = obj.fun;
aNewFunction();
全域變數
{i: 'obj內變數 obj屬性', fun: ƒ}
obj內變數 obj屬性
.......................................
全域變數
Window {window: Window, self: Window, document: document, name: '', location: Location, …}
全域變數
let i='全域變數';
let obj={
i:'obj內變數 obj屬性',
fun:function (){
console.log(i)
console.log(this)
console.log(this.i)}
}
obj.fun();
console.log('.......................................')
let aNewFunction = obj.fun;
aNewFunction();
全域變數
{i: 'obj內變數 obj屬性', fun: ƒ}
obj內變數 obj屬性
.......................................
全域變數
Window {window: Window, self: Window, document: document, name: '', location: Location, …}
undefined
用最單純的方式直接呼叫fuction,在沒有嚴格模式的狀況下,this如我們所預期是:window object。
window object的屬性i
照理來說,就會是window object的變數,也就是全域變數。
全域變數的變數有效範圍是全域的,所以不會有「不在有效範圍所以是undefined的問題」
我們可以從obj.fun();
得出的結果的確是:全域變數,得證。
但他今天說,用let宣告的全域變數,不會是全域屬性。
換句話說,我不可以透過window這個全域物件,存取他的屬性,來得到用let宣告的全域變數。
所以我們在aNewFunction();
得到undefined的答案,符合預期。