2014年8月13日 星期三

[JavaScript] this

JavaScript裡面的this到底指的是甚麼?很多人都會告訴你this指的是當前對象。這樣理解對嗎?在大多數情況下確實沒錯。比如我們經常會在網頁上寫這樣的JavaScript:
<input type="submit" value="提交" onlick="this.value='提交數據'"/>
這裡的this顯然指的是當前對象,即這個提交按鈕。通常,我們使用this的情況都與此類似。但是有人麼情況不是這樣的呢?

大家看看這個例子:
var foo = function(){
    console.log(this);
}
foo();
new foo();
比較一下foo()和new foo()的執行結果,你會發現,前者的this指向的並非foo本身,而是當前頁面的window對象,而new foo()才真正的指向foo。這是為甚麼呢?

其實這牽涉到JavaScript的一條重要特性,就是所謂的"閉包(Closure)"。閉包這個概念說複雜也不複雜,但也不是簡單到能用一兩句話說清。現在,我要告訴大家的是,因為閉包的存在,JavaScript中的作用域變得相當重要。

所謂的作用域,簡單的說,就是創意一個函數時在甚麼環境下創建的。而this變數的值,如果沒有指定的話,就是函數當前的作用域。

在前面的例子裡,foo()函數是在全局作用域(這裡)


http://www.cnblogs.com/ruxpinsp1/archive/2008/04/20/1162463.html

沒有留言:

張貼留言