javascript的this問題
看過很多關於javascript中this指向的問題,現總結如下,如有不正確,歡迎指正。
javascript中,this的指向並不是在函式定義的時候確定的,而是在其被呼叫的時候確定的。也就是說,函式的呼叫方式決定了this指向 。記住: this 就是一個指標,指向我們呼叫函式的物件。
在此將javascript中this的呼叫方式分為以下幾種:
1、直接呼叫:
直接呼叫是指通過funName() 這種方式呼叫。此時,函式內部的this指向全域性變數。
function foo() { console.log(this === global); } foo(); //true
注意:直接呼叫並不是僅僅指在全域性作用域下進行呼叫,而是說在任何作用域下通過funName() 這種方式呼叫。如下兩個例子亦是屬於直接呼叫方式:
a、使用bind函式改變外層函式的作用域,然後在內層直接呼叫,其this指向依然是全域性變數:
function foo() { console.log(this === global); } function foo1() { foo(); }; var foo2 = foo1.bind({}); //改變foo1函式的作用域 foo2(); //true 依然指向全域性變數
b、函式表示式,將一個函式賦值給一個變數,然後通過直接呼叫的呼叫方式呼叫此函式,其this指向依然是全域性變數:
var obj = { foo: function(){ console.log(this === obj);//false console.log(this === global);//true } } var f = obj.foo; f();