面試過程中javascript原型鏈與範圍的問題

來源:互聯網
上載者:User

面試過程中javascript原型鏈與範圍的問題

現在校招也基本結束了,所以有時間把這段時間遇到的問題做個總結.在很多的筆試題目中,發現有很多對JS範圍方面的考察,所以查閱資料總結一下.

眾所周知,js不像其他OOP語言那樣,他是一種弱類型的語言,對資料類型沒有很明顯的區別.還有一點不同是它的範圍,引起這點不同主要是因為js的繼承方式是通過原型鏈的方式來實現的.

a)js沒有塊級範圍,所謂塊級範圍即if,for,while(花括弧括起來的部分)語句裡面的部分.測試如下(Chrome瀏覽器).

下面為輸出結果

從結果可以看出,js不存在塊級範圍,一樣可以輸出str1.

b)js裡面只有函數範圍,以及全域範圍,下面分析函數範圍.

下面為輸出結果

從結果可以看出js存在函數範圍,所以在fun1以外str2未定義.要想搞明白js的範圍就要牽扯到原型鏈的問題,下面對其簡單分析.

c)當在當前範圍找不到指定對象或變數時,js會通過原型鏈向上尋找,即尋找當前範圍的父級範圍,如若仍未找到,仍會向上尋找,直到找到,或找到根節點未找到為止.

下面為輸出結果:

從結果可以看出,fun2中仍然可以輸出str4,因為它的父級範圍為全域範圍,且全域範圍中存在str4變數.

d)關於上面說的父級範圍,還有一種情況,就是假如調用的是函數,即函數嵌套時,父級範圍的指代.

這點容易讓人迷惑,誤以為會輸出Eric,但結果卻不是這樣的,結果如下:

從結果可以看出,輸出的是gaohui而不是Eric,此時的父級範圍指的是函數定義地方範圍的父級範圍,而不是函數調用的地方的父級範圍.


在此只是對面試過程中關於js的範圍方面的問題做了簡單的分析,其中涉及到更為複雜的js原型鏈的問題沒有深入說明,若想深究,搞明白,可參考這邊博文http://www.cnblogs.com/wangfupeng1988/tag/%E5%8E%9F%E5%9E%8B%E9%93%BE/

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.