前端面試八股文每日一題——JavaScript
對象類型和原始類型的不同之處,函數(shù)傳參是對象會發(fā)生什么問題?
答:在JS中,除了原始類型外其他都是對象類型。
對象類型和原始類型不同的是,原始類型在棧中存儲的是值本身,對象類型在棧中存儲的是地址/指針(而值存儲在堆中)。
當(dāng)我們創(chuàng)建了一個對象類型之后,計算機就會在內(nèi)存的堆中開辟一個空間來存放值,然后再把這個空間的地址/指針存儲在棧中。
比如const a = 1;,那么a中存儲的就是值1。
比如const b?= [];,那么b中存儲的就是內(nèi)存地址#001,在地址#001的位置中又存放了值[]。
當(dāng)對象作為函數(shù)的實參傳入時,實際上是把地址傳遞給了函數(shù)中的變量,所以當(dāng)我們在函數(shù)中對同一個地址的數(shù)據(jù)進行修改時,就會影響到兩個變量的值。
標(biāo)簽: