一、全局變量和局部變量
我們可以簡單的這樣來看瀏覽器對js的使用:
瀏覽器接收到服務器發過來的代碼後,會解釋生成一棵 存在於瀏覽器緩存中的 Dom樹。
同時爲了方便程序員通過js代碼來控制瀏覽器操作,也提供了一個名爲window的對象,這個對象中有兩個很重要的部分:
一個就是document,它中間包含了一些能夠操作dom樹的方法,能讓程序員方便的訪問和修改dom樹從而控制界面的現實。
其二就是js全局成員,這個其實就是指的爲window添加屬性。通俗的說,window就是我們js運行的全局環境,平時我們在<script>標籤中定義 全局變量 其實就是在爲window添加屬性。
但值得注意的是,就算是在方法{}中定義變量,如果沒有使用var關鍵字來聲明的話,那這個變量不會成爲方法的局部變量,而是也會作爲全局變量添加到window對象中。所以,儘管平時我們定義變量可以省略var,但爲了避免不小心出現這個問題,還是都寫上var關鍵字吧。
瀏覽器接收到服務器發過來的代碼後,會解釋生成一棵 存在於瀏覽器緩存中的 Dom樹。
同時爲了方便程序員通過js代碼來控制瀏覽器操作,也提供了一個名爲window的對象,這個對象中有兩個很重要的部分:
一個就是document,它中間包含了一些能夠操作dom樹的方法,能讓程序員方便的訪問和修改dom樹從而控制界面的現實。
其二就是js全局成員,這個其實就是指的爲window添加屬性。通俗的說,window就是我們js運行的全局環境,平時我們在<script>標籤中定義 全局變量 其實就是在爲window添加屬性。
但值得注意的是,就算是在方法{}中定義變量,如果沒有使用var關鍵字來聲明的話,那這個變量不會成爲方法的局部變量,而是也會作爲全局變量添加到window對象中。所以,儘管平時我們定義變量可以省略var,但爲了避免不小心出現這個問題,還是都寫上var關鍵字吧。
二、this關鍵字
每個方法都包含兩個內部屬性,其中一個就是this。
平時我們編寫C#或Java代碼時,都在類中使用過this關鍵字,它在這兩種高級語言中保存了當前類正在運行的對象的引用。
在js中,this引用的是函數據以執行操作的對象,也就是 函數在執行時所處的作用域(通俗:就是哪個對象.出了這個函數,那麼函數裏的this就代表哪個對象)。
但因爲js的弱類型機制及函數本身就是一個Function對象實例的原因,使得一個函數的調用者可以在運行時由一個切換到另一個。
在js中,this引用的是函數據以執行操作的對象,也就是 函數在執行時所處的作用域(通俗:就是哪個對象.出了這個函數,那麼函數裏的this就代表哪個對象)。
但因爲js的弱類型機制及函數本身就是一個Function對象實例的原因,使得一個函數的調用者可以在運行時由一個切換到另一個。
看看下面這個例子:
var color = "blue"; //定義一個全局變量 color,相當於 window.color= "blue"
var color = "blue"; //定義一個全局變量 color,相當於 window.color= "blue"
var o = { color: "red" }; //定義一個全局變量 o,相當於 window.o={ color: "red" }
////定義一個全局變量(方法)sayColor,相當於window. sayColor =function(){alert(this.color); }
////定義一個全局變量(方法)sayColor,相當於window. sayColor =function(){alert(this.color); }
function sayColor() {
alert(this.color);
}
sayColor(); //輸出blue.相當於window.sayColor();
//因此,此時sayColor中的this代表window.所以this.color=window.color
//因此,此時sayColor中的this代表window.所以this.color=window.color
o.sayColor = sayColor; //此時將sayColor的函數指針賦值給o對象的屬性sayColor
o.sayColor(); //那麼此時sayColor裏的this代表的是o,所以this.color=o.color="red"
三、this和prototype
未完待續......太困了...... L O L