使用 function f() {} 或者 var f = function() {} 來定義的函數,this 是指向 全局對象
var a = { b: 1, c: function(){ function d() { alert(this.b); }; d(); } }; javascript機制會在此函數裡尋找b,發現此函數沒有b,於是通過作用域鏈找到c方法,在裡面也沒有找到b,於是輸出undefined(因為這個匿名函數不屬於a對象,只不過是c方法屬於a對象,所以作用域鏈是不會鏈接到a對象的,而是指向全局對象) var a = { b: 1, c: function(){ var that = this; function d() { alert(that.b); }; d(); } }; 修改後輸出 1 ,that緩存了c 方法的作用域鏈