Simple Call 簡易呼叫 下方這個方式就是 this 的簡易呼叫,但請盡量不要 使用簡易呼叫的 this。
1 2 3 4 5 6 var  vm = "全域" ;function  callName (  console .log(this .vm); } callName(); 
最簡單判斷是不是 Simple Call 的方式就是看到直接呼叫函式這個方法(如上方程式碼範例)。
以下為 Simple Call 的情境 IIFE 立即函式 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 var  vm = "全域" ;function  callName (  console .log(this .vm); } (function  (   console .log(this .vm);    function  callSomeone (     console .log(this .vm);    }   callSomeone(); })(); 
立即函式是定義後就會直接執行,這邊並沒有另外定義一個變數給立即函式,所以他會找到外層的全域變數。 
立即函式有再定義一個函式並直接呼叫他,因為前面也沒有給予定義的變數或物件,所以它也會直接找到外層的變數並使用它。 
通常全域變數的會定義在 window 這個全域物件下,但 Simple Call 並不是 window.simpleCall() 這個概念下被呼叫。 
不是看呼叫的位置,而是呼叫的方式來決定 this 指向的是誰。 
 
閉包 Closure 閉包的概念是在函式內再宣告一個函式,並使其內部函式去調用外層函式內的變數。
1 2 3 4 5 6 7 8 9 10 11 12 var  vm = "全域" ;function  easyCard (base )   var  money = base;   var  card = "悠遊卡" ;   return  function  (update )      money = money + update;     console .log(this .vm, money);    }; } var  myEasyCard = easyCard(100 );myEasyCard(10 ); 
Callback 就是把 A 函式傳到 B 函式內,並在 B 函式內執行,執行後會指向全域的變數。
1 2 3 4 5 6 7 8 9 10 var  vm = "全域" ;function  myEasyCard (callback )   var  money = 100 ;   return  callback(money); } myEasyCard(function  (money )    console .log(this .vm, money + 100 );  }); 
forEach 下方有一陣列,取得資料可用 forEach 相當方便,forEach 也是一個 callback function,this 也會指向全域的變數,而 i 會取得陣列中的資料。
1 2 3 4 5 6 var  vm = "全域" ;var  a = [1 , 2 , 3 ];a.forEach(function  (i )    console .log(this .vm, i);  }); 
函式中直接定義 this 
下方有一個物件裡面有一個 callName 的函式,當中在執行 setTimeout 的函式,而這個 SetTimeout 函式屬於 callback function,this 會指向全域變數。 
因為其呼叫方式的是直接在全域下呼叫,所以不管所定義的位置在哪裡,都會指向全域。 
 
1 2 3 4 5 6 7 8 9 10 11 var  vm = "全域" ;var  family = {  vm: "小明" ,   callName: function  (     setTimeout(function  (       console .log(this .vm);      }, 1000 );   }, }; family.callName(); 
如果想要取得物件 family 物件中的變數可以在裡面直接定義 this,如下方程式碼。
1 2 3 4 5 6 7 8 9 10 11 12 var  vm = "全域" ;var  family = {  vm: "小明" ,   callName: function  (     var  self = this ;      setTimeout(function  (       console .log(self.vm);      }, 1000 );   }, }; family.callName(); 
資料參考 
鐵人賽:JavaScript 的 this 到底是誰? JavaScript This 系列文:this 為什麼指向 window JavaScript This 系列文:this 與物件的關係 重新認識 JavaScript: Day 20 What’s “THIS” in JavaScript (鐵人精華版) 你懂 JavaScript 嗎?#15 閉包(Closure)