日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

【转】javascript中的LHS与RHS

發(fā)布時(shí)間:2025/7/14 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】javascript中的LHS与RHS 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原文鏈接:http://www.cnblogs.com/yangxiaoguai132/p/5064625.html

最近在學(xué)習(xí)javascript過(guò)程中,接觸了LHS與RHS的概念,剛開(kāi)始的時(shí)候有點(diǎn)理解不清,現(xiàn)在做一些梳理,方便以后進(jìn)行理解。

LHS與RHS:javascript引擎的兩種查找類(lèi)型,含義是賦值操作的左側(cè)與右側(cè)。

LHS:對(duì)哪個(gè)賦值就對(duì)哪個(gè)進(jìn)行LHS引用,可以理解為賦值操作的目標(biāo)。

RHS:需要獲取哪個(gè)變量的值,就對(duì)哪個(gè)變量的值進(jìn)行RHS引用,理解為賦值操作的源頭。

賦值操作有多種形式,對(duì)于以上的兩種對(duì)LHS與RHS的解釋,我剛剛接觸,還是很混亂。

我的理解就是,一般在左邊的需要被賦值,就是LHS引用,右邊需要尋找到他的值,就是RHS引用。

例如:

1 function foo(a){ 2 var b=a; 3 rerurn a+b; 4 } 5 var c=foo(2);

以上代碼中有3個(gè)LHS與4個(gè)RHS,分析如下:

第一,var c中的c需要被賦值,在賦值操作的左側(cè),所以對(duì)c進(jìn)行LHS引用

第二,變量c需要被賦值,他的值是foo(2),那么foo(2)的值是多少呢,需要查找foo(2)的值,在賦值操作的右側(cè),所以對(duì)foo(2)進(jìn)行RHS引用

第三,隱含賦值操作,將2傳遞給function foo(a){……}函數(shù)的參數(shù)a,a在賦值操作的左側(cè),對(duì)a進(jìn)行LHS引用

第四,var b=a;中,b需要被賦值,處在賦值操作的左側(cè),所以b進(jìn)行的LHS,b的值將從a來(lái),那么右側(cè)的a的值從何而來(lái)呢?這就需要對(duì)賦值操作右側(cè)的a進(jìn)行RHS。

第五,return a+b;中,需要找到a與b的值的來(lái)源,a與b都在賦值操作的右側(cè),才能得到a+b的值,所以對(duì)a與b都是進(jìn)行RHS引用。

為什么要區(qū)分LHS與RHS?

因?yàn)樵谧兞窟€沒(méi)有聲明(在任何作用域中都無(wú)法找到該變量)情況下,這兩種查詢(xún)行為是不一樣的。

例如:

1 function foo(a){ 2 console.log(a+b); 3 b=a; 4 } 5 foo(2);

以上代碼對(duì)b進(jìn)行RHS的時(shí)候無(wú)法找到該變量的值,則會(huì)拋出ReferenceError異常,如果是LHS找不到變量,非嚴(yán)格模式下,會(huì)在全局作用域中,創(chuàng)建一個(gè)具有該名稱(chēng)的變量,嚴(yán)格模式下,會(huì)拋出與RHS類(lèi)似的異常。

例如:

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>Document</title><script type="text/javascript">function init(a){b=a+3;}init(2); alert(b);//5</script> </head> <body></body> </html>

以上代碼中,對(duì)b進(jìn)行LHS沒(méi)有找到該變量,在全局作用域中創(chuàng)建了一個(gè)同名的變量b,在函數(shù)init外部可以訪(fǎng)問(wèn)到b變量。

如果將代碼更改為如下:

1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset="UTF-8">5 <title>Document</title>6 <script type="text/javascript">7 function init(a){8 var b=a+3;9 10 } 11 init(2); 12 alert(b); 13 </script> 14 </head> 15 <body> 16 17 </body> 18 </html>

在function中定義了一個(gè)局部變量b,全局作用域中定義,控制臺(tái)報(bào)錯(cuò)如圖顯示,窗口中沒(méi)有任何輸出

將代碼改成如下:

1 <!DOCTYPE html>2 <html lang="en">3 <head>4 <meta charset="UTF-8">5 <title>Document</title>6 <script type="text/javascript">7 function init(a){8 var b=a+3;9 10 } 11 init(2); 12 alert(window.b);//undefined 13 </script> 14 </head> 15 <body> 16 17 </body> 18 </html>

將代碼改成如上所示,控制臺(tái)并沒(méi)有報(bào)錯(cuò), 因?yàn)閣indow.b作為window的一個(gè)屬性訪(fǎng)問(wèn),所以會(huì)返回undefined,而b作為一個(gè)變量沒(méi)有定義的時(shí)候是會(huì)報(bào)錯(cuò)的

轉(zhuǎn)載于:https://www.cnblogs.com/xuanbiyijue/p/7815567.html

《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專(zhuān)家共同創(chuàng)作,文字、視頻、音頻交互閱讀

總結(jié)

以上是生活随笔為你收集整理的【转】javascript中的LHS与RHS的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。