from Kuro's Blog : What's THIS in JavaScript ? [上]
this
代表的是 function 執行時所屬的『物件』而在 JavaScript 這個語言內,除了基本型別外的一切,都是「物件」, 所以 function 本身就是物件。
var foo = function() {
this.count++;
};
foo
是 function(物件),也是「全域變數」。
而全域變數在 JavaScript 當中,其實就是全域物件的屬性。
全域物件在瀏覽器是 window,在 node 內叫做 global。
// 在瀏覽器
window = {
foo: function() {
this.count++;
}
}
兩個重點:
var obj = {
func1: function(){
console.log( this === obj );
var func2 = function(){
// 沒有特定指明 `this` 的情況下,`this` 預設"綁定" `window`
console.log( this === obj );
};
// 因為已被綁定,所以是 window
func2();
}
};
obj.func1(); // 值為 function{...}
// true (func1 是 obj 的方法, this = obj)
// false (this 是 window)
http://jsbin.com/guvabak/edit?js,console
this
不是 function 本身this
也不是 function 的 scopethis
與 function 在"何處被宣告"完全無關,而是取決於 function "被呼叫的方式"this
指的是,當 function 執行時,這個 scope 的 owner