新聞中心
現(xiàn)在校招也基本結(jié)束了,所以有時(shí)間把這段時(shí)間遇到的問(wèn)題做個(gè)總結(jié).在很多的筆試題目中,發(fā)現(xiàn)有很多對(duì)JS作用域方面的考察,所以查閱資料總結(jié)一下.

創(chuàng)新互聯(lián)從2013年開(kāi)始,先為新興等服務(wù)建站,新興等地企業(yè),進(jìn)行企業(yè)商務(wù)咨詢(xún)服務(wù)。為新興企業(yè)網(wǎng)站制作PC+手機(jī)+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問(wèn)題。
眾所周知,js不像其他OOP語(yǔ)言那樣,他是一種弱類(lèi)型的語(yǔ)言,對(duì)數(shù)據(jù)類(lèi)型沒(méi)有很明顯的區(qū)別.還有一點(diǎn)不同是它的作用域,引起這點(diǎn)不同主要是因?yàn)閖s的繼承方式是通過(guò)原型鏈的方式來(lái)實(shí)現(xiàn)的.
a)js沒(méi)有塊級(jí)作用域,所謂塊級(jí)作用域即if,for,while(花括號(hào)括起來(lái)的部分)語(yǔ)句里面的部分.測(cè)試如下(Chrome瀏覽器).
下面為輸出結(jié)果
從結(jié)果可以看出,js不存在塊級(jí)作用域,一樣可以輸出str1.
b)js里面只有函數(shù)作用域,以及全局作用域,下面分析函數(shù)作用域.
下面為輸出結(jié)果
從結(jié)果可以看出js存在函數(shù)作用域,所以在fun1以外str2未定義.要想搞明白js的作用域就要牽扯到原型鏈的問(wèn)題,下面對(duì)其簡(jiǎn)單分析.
c)當(dāng)在當(dāng)前作用域找不到指定對(duì)象或變量時(shí),js會(huì)通過(guò)原型鏈向上尋找,即查找當(dāng)前作用域的父級(jí)作用域,如若仍未找到,仍會(huì)向上尋找,直到找到,或找到根節(jié)點(diǎn)未找到為止.
下面為輸出結(jié)果:
從結(jié)果可以看出,fun2中仍然可以輸出str4,因?yàn)樗母讣?jí)作用域?yàn)槿肿饔糜?且全局作用域中存在str4變量.
d)關(guān)于上面說(shuō)的父級(jí)作用域,還有一種情況,就是假如調(diào)用的是函數(shù),即函數(shù)嵌套時(shí),父級(jí)作用域的指代.
這點(diǎn)容易讓人迷惑,誤以為會(huì)輸出Eric,但結(jié)果卻不是這樣的,結(jié)果如下:
從結(jié)果可以看出,輸出的是gaohui而不是Eric,此時(shí)的父級(jí)作用域指的是函數(shù)定義地方作用域的父級(jí)作用域,而不是函數(shù)調(diào)用的地方的父級(jí)作用域.
在此只是對(duì)面試過(guò)程中關(guān)于js的作用域方面的問(wèn)題做了簡(jiǎn)單的分析,其中涉及到更為復(fù)雜的js原型鏈的問(wèn)題沒(méi)有深入說(shuō)明,若想深究,搞明白,可參考這邊博文http://www.cnblogs.com/wangfupeng1988/tag/%E5%8E%9F%E5%9E%8B%E9%93%BE/
名稱(chēng)欄目:面試過(guò)程中javascript原型鏈與作用域的問(wèn)題
本文來(lái)源:http://www.dlmjj.cn/article/djisscc.html


咨詢(xún)
建站咨詢(xún)
