iT邦幫忙

2021 iThome 鐵人賽

DAY 22
0
Modern Web

前端幼鳥三十天養成記系列 第 22

let宣告的全域變數,不再是全域屬性惹??

  • 分享至 

  • xImage
  •  

用var令全域變數

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令全域變數

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的答案,符合預期。


上一篇
let / const 細節版
下一篇
預編譯
系列文
前端幼鳥三十天養成記30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言