理解javascript原型和範圍系列(12)——簡介【範圍】,javascript原型

來源:互聯網
上載者:User

理解javascript原型和範圍系列(12)——簡介【範圍】,javascript原型

前幾節的文章請查閱《理解javascript原型和範圍系列》

提到範圍,有一句話大家(有js開發經驗者)可能比較熟悉:“javascript沒有塊級範圍”。所謂“塊”,就是大括弧“{}”中間的語句。例如if語句:

再比如for語句:

所以,我們在編寫代碼的時候,不要在“塊”裡面聲明變數,要在代碼的一開始就聲明好了。以避免發生歧義。如:

 

其實,你光知道“javascript沒有塊級範圍”是完全不夠的,你需要知道的是——javascript除了全域範圍之外,只有函數可以建立的範圍

所以,我們在聲明變數時,全域代碼要在代碼前端聲明,函數中要在函數體一開始就聲明好。除了這兩個地方,其他地方都不要出現變數聲明。而且建議用“單var”形式。

jQuery就是一個很好的樣本:

 

 

下面繼續說範圍。範圍是一個很抽象的概念,類似於一個“地盤”

如,全域代碼和fn、bar兩個函數都會形成一個範圍。而且,範圍有上下級的關係,上下級關係的確定就看函數是在哪個範圍下建立的。例如,fn範圍下建立了bar函數,那麼“fn範圍”就是“bar範圍”的上級。

 

範圍最大的用處就是隔離變數,不同範圍下同名變數不會有衝突。例如以上代碼中,三個範圍下都聲明了“a”這個變數,但是他們不會有衝突。各自的範圍下,用各自的“a”。

說到這裡,咱們又可以拿出jquery源碼來講講了。

jQuery源碼的最外層是一個自動執行的匿名函數:

為什麼要這樣做呢?

原因就是在jQuery源碼中,聲明了大量的變數,這些變數將通過一個函數被限制在一個獨立的範圍中,而不會與全域範圍或者其他函數範圍的同名變數產生衝突。

全世界的開發人員都在用jQuery,如果不這樣做,很可能導致jQuery源碼中的變數與外部javascript代碼中的變數重名,從而產生衝突。

 

範圍這塊只是很不好解釋,咱們就小步快跑,一步一步慢慢展示給大家。

下一節將把範圍和執行內容環境結合起來說一說。

可見,要理解閉包,不是一兩句話能說清楚的。。。

---------------------------------------------------------------------------

本文已更新到《理解javascript原型和範圍系列》的目錄,更多內容可參見《理解javascript原型和範圍系列》。

另外,歡迎關注我的微博。

也歡迎關注我的其他教程——別怕,都是免費的!

《微軟petshop4.0源碼解讀視頻》《json2.js源碼解讀視頻》

--------------------------------------------------------------------------


javascript範圍鏈與原型鏈有聯絡?從原理上分析,不要說我網上找得到的

個人感覺,沒什麼聯絡。
一般來說,範圍鏈是針對變數的,js裡面大的範圍上來說,只有兩種範圍,全域範圍和函數內部範圍,如果函數1裡面又定義了函數2(一般都是匿名函數), 那麼就有了這麼一個範圍鏈全域範圍==>函數1範圍==>函數2範圍;特點是函數1裡面可以直接使用全域範圍的變數,函數2裡面可以直接使用全域範圍和函數1範圍的變數
原型鏈的話,一般是定義建構函式時用到,可以認為是針對建構函式的或者說針對建構函式對應的類的;原型鏈的頭部就是Object類/建構函式,如果有建構函式1.prototype = 建構函式2;那麼也就有這麼一個原型鏈; Object ==> 建構函式1 ==> 建構函式2,這樣的好處是建構函式2對應的類,可以擁有建構函式1 和Object中的屬性,js沒有對應繼承的關鍵字,所以用原型鏈來類比繼承的效果。
純手打,希望對你有協助
 
javascript 範圍問題

this.b=100;
this.c={
d:function(){
alert(this.b);//這裡會彈出undefined,怎麼才能顯示function a()中的100?
}
}
}
var i=new a();
i.c.d.call(i);
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.