JavaScript面試題(指針、帽子和女朋友)
首先,事情開(kāi)始于一道面試題
<script>
function A(){
this.name="";
this.age=18;
}
var a1=new A();
a1.name="尼古拉斯·屌";
var a2=a1;
a2.name="blue";
console.log(a1.name); //變成blue了
var str1="尼古拉斯·屌";
var str2=str1;
str2="blue";
console.log(str1); //沒(méi)變,還是尼古拉斯·屌
</script>
簡(jiǎn)單來(lái)說(shuō)
a2=a1;
a2.name=xxx; //a1.name會(huì)變
str2=str1;
str2=xxx; //str1不會(huì)變
歡迎覺(jué)得廢話太多的同學(xué)直接翻到最后看“技術(shù)流解釋”哈,那么我們開(kāi)始
套用一句比較俗的話:“道理我都懂,可是為什么字符串就不會(huì)變呢”,JavaScript作為高級(jí)語(yǔ)言并沒(méi)有指針的概念,但卻又總被這事兒困擾,今天我就想試試讓大家理解這個(gè)概念,如果要弄明白這個(gè)事情,請(qǐng)先來(lái)弄明白一個(gè)特別簡(jiǎn)單的事情:
假設(shè)你有女朋友叫夢(mèng)琪,喜歡帶黃色帽子,你幫她買(mǎi)了頂紅色帽子,請(qǐng)問(wèn):夢(mèng)琪帶什么顏色的帽?
答:紅色
假設(shè)你有女朋友叫夢(mèng)琪,喜歡帶黃色帽子,你直接換了個(gè)喜歡帶紅色帽子的女朋友,請(qǐng)問(wèn):夢(mèng)琪帶什么顏色的帽子?
答:還是黃色,沒(méi)變
如果我們理解了上面這個(gè)花心蘿卜和戴帽子的女朋友的問(wèn)題,那么問(wèn)題就變得非常簡(jiǎn)單,用代碼再表示一遍:
//情況1:換帽子 你.女朋友=夢(mèng)琪; 你.女朋友.帽子=紅色; console.log(夢(mèng)琪.帽子); //紅色 //情況2:換女朋友 你.女朋友=夢(mèng)琪; 你.女朋友=安易; console.log(夢(mèng)琪.帽子); //黃色,沒(méi)變
簡(jiǎn)單來(lái)說(shuō),你換女朋友了,關(guān)人家帽子啥事,對(duì)吧
為了徹底弄明白問(wèn)題的步驟1/2:
讓我們把這個(gè)本就混亂的關(guān)系搞得更亂一些吧[捂臉]
假設(shè)張三和李四,都找了同一個(gè)女朋友,張三給她買(mǎi)了一頂帽子,請(qǐng)問(wèn):李四的女朋友換帽子了沒(méi)?
答:換了
假設(shè)張三和李四,都找了同一個(gè)女朋友,張三扛不住了,又新找了個(gè)女朋友,請(qǐng)問(wèn):這跟李四女朋友的帽子有關(guān)系嗎?
答:有毛關(guān)系啊
上面這個(gè)混亂的關(guān)系,用程序表述出來(lái)就是:
//情況1.換帽子 張三女朋友=李四女朋友; //傳說(shuō)中的引用:第一次見(jiàn)到能把出軌說(shuō)的這么清新脫俗的 張三女朋友.帽子=綠色的帽子; console.log(李四女朋友.帽子); //變了,綠的 //情況2.跟帽子有毛關(guān)系 張三女朋友=李四女朋友; 張三女朋友=新的女朋友; console.log(李四女朋友.帽子); //不知道什么顏色,反正沒(méi)變
為了徹底弄明白問(wèn)題的步驟2/2:
直接上代碼了,解釋見(jiàn)注釋哈
//情況1:帽子 var 張三女朋友=new 女朋友(); //太方便了有沒(méi)有 var 李四女朋友=張三女朋友; //又引用了 張三女朋友.帽子=紅的; console.log(李四女朋友.帽子); //紅的,變了 //情況2:跟帽子有毛關(guān)系 var 張三女朋友=new 女朋友(); var 李四女朋友=張三女朋友; 張三女朋友=另一個(gè); console.log(李四女朋友.帽子); //沒(méi)變,跟帽子有毛關(guān)系
所以,現(xiàn)在請(qǐng)跟隨我再來(lái)重新看一遍上面的問(wèn)題
//情況1 var a1=new A(); var a2=a1; //注意:在這個(gè)時(shí)候,a1和a2就是同一個(gè)東西,引用嘛,你懂的 a2.name="blue"; //你給女朋友,買(mǎi)了頂新的帽子 console.log(a1.name); //她的帽子是Blue色的 //情況2 var str1="aaa"; var str2=str1; //注意:這個(gè)時(shí)候,str1和str2也是同一個(gè)東西,也是引用 str2="blue"; //你直接換了個(gè)女朋友 console.log(str1); //你原先女朋友沒(méi)啥變化
人上了年紀(jì)就會(huì)很啰嗦,直接上圖多好:
情況1:a2.name="blue"

情況2:str2="blue"

==========================純技術(shù)流分隔線==========================
1.指針:代表一個(gè)變量或?qū)傩灾赶蛘l(shuí)
2.賦值:代表改變變量或?qū)傩缘闹赶?/p>
合起來(lái)用:
a1=a2; a2.name='blue'; //改變a2.name指向了'blue';但a1和a2依然指向同一個(gè)對(duì)象,所以:a1.name=>'blue' str1=str2; str2='blue'; //改變str2指向了'blue';這時(shí)str1和str2不再指向同一對(duì)象,所以:str1不變
以上所述是小編給大家介紹的JavaScript面試題(指針、帽子和女朋友),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- 詳解JS中的this、apply、call、bind(經(jīng)典面試題)
- 關(guān)于javascript作用域的常見(jiàn)面試題分享
- 10道典型的JavaScript面試題
- 80%應(yīng)聘者都不及格的JS面試題
- Javascript前端經(jīng)典的面試題及答案
- 一道面試題引發(fā)的對(duì)javascript類(lèi)型轉(zhuǎn)換的思考
- JavaScript中最常見(jiàn)的三個(gè)面試題解析
- JS搜狐面試題分析
- 關(guān)于js原型的面試題講解
- JavaScript面試題大全(推薦)
- AngularJS 面試題集錦
- js前端面試題及答案整理(一)
- 14 個(gè)折磨人的 JavaScript 面試題
- JS面試題---關(guān)于算法臺(tái)階的問(wèn)題
- 一道優(yōu)雅面試題分析js中fn()和return fn()的區(qū)別
- 一道關(guān)于JavaScript變量作用域的面試題
- 一道常被人輕視的web前端常見(jiàn)面試題(JS)
- 最新Javascript程序員面試試題和解題方法
相關(guān)文章
如何用JavaScript實(shí)現(xiàn)一個(gè)數(shù)組惰性求值庫(kù)
這篇文章主要介紹了如何用JavaScript實(shí)現(xiàn)一個(gè)數(shù)組惰性求值庫(kù),對(duì)惰性求值感興趣的同學(xué),可以參考下2021-05-05
玩轉(zhuǎn)JavaScript函數(shù):apply/call/bind技巧
歡迎來(lái)到這篇關(guān)于JavaScript中apply、call、bind函數(shù)的指南,這里充滿了實(shí)用技巧和深入理解,讓你的編程之旅更加游刃有余,趕快翻開(kāi)這個(gè)神秘的“魔法書(shū)”,讓我們一起探索吧!2024-01-01
使用cookie繞過(guò)驗(yàn)證碼登錄的實(shí)現(xiàn)代碼
本文通過(guò)實(shí)例代碼給大家詳細(xì)介紹了使用cookie繞過(guò)驗(yàn)證碼登錄的實(shí)現(xiàn)方法,需要的朋友參考下吧2017-10-10
Javascript中for循環(huán)語(yǔ)句的幾種寫(xiě)法總結(jié)對(duì)比
如果您希望一遍又一遍地運(yùn)行相同的代碼,并且每次的值都不同,那么使用循環(huán)是很方便的,javascript中for循環(huán)也是非常常用的,下面這篇文章主要介紹了Javascript中for循環(huán)的幾種寫(xiě)法,需要的朋友可以參考借鑒,一起來(lái)看看吧。2017-01-01
JavaScript之filter_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
filter也是一個(gè)常用的操作,它用于把Array的某些元素過(guò)濾掉,然后返回剩下的元素。下面通過(guò)實(shí)例代碼給大家簡(jiǎn)答介紹下javascript中的filter,需要的的朋友參考下吧2017-06-06
javascript移動(dòng)端 電子書(shū) 翻頁(yè)效果實(shí)現(xiàn)代碼
這篇文章主要介紹了javascript移動(dòng)端 電子書(shū) 翻頁(yè)效果實(shí)現(xiàn)代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-09-09

