溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

如何理解javascript原型鏈與作用域的問(wèn)題

發(fā)布時(shí)間:2021-11-17 10:12:10 來(lái)源:億速云 閱讀:133 作者:柒染 欄目:web開(kāi)發(fā)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)?lái)有關(guān)如何理解javascript原型鏈與作用域的問(wèn)題,文章內(nèi)容豐富且以專(zhuān)業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

眾所周知,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瀏覽器).

如何理解javascript原型鏈與作用域的問(wèn)題

下面為輸出結(jié)果

如何理解javascript原型鏈與作用域的問(wèn)題

從結(jié)果可以看出,js不存在塊級(jí)作用域,一樣可以輸出str1.

b)js里面只有函數(shù)作用域,以及全局作用域,下面分析函數(shù)作用域.

如何理解javascript原型鏈與作用域的問(wèn)題

下面為輸出結(jié)果

如何理解javascript原型鏈與作用域的問(wèn)題

從結(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)未找到為止.

如何理解javascript原型鏈與作用域的問(wèn)題

下面為輸出結(jié)果:

如何理解javascript原型鏈與作用域的問(wèn)題

從結(jié)果可以看出,fun2中仍然可以輸出str4,因?yàn)樗母讣?jí)作用域?yàn)槿肿饔糜?且全局作用域中存在str4變量.

d)關(guān)于上面說(shuō)的父級(jí)作用域,還有一種情況,就是假如調(diào)用的是函數(shù),即函數(shù)嵌套時(shí),父級(jí)作用域的指代.

如何理解javascript原型鏈與作用域的問(wèn)題

這點(diǎn)容易讓人迷惑,誤以為會(huì)輸出Eric,但結(jié)果卻不是這樣的,結(jié)果如下:

如何理解javascript原型鏈與作用域的問(wèn)題

從結(jié)果可以看出,輸出的是gaohui而不是Eric,此時(shí)的父級(jí)作用域指的是函數(shù)定義地方作用域的父級(jí)作用域,而不是函數(shù)調(diào)用的地方的父級(jí)作用域.

上述就是小編為大家分享的如何理解javascript原型鏈與作用域的問(wèn)題了,如果剛好有類(lèi)似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI