摘要:問題復現最近朋友發給我這樣的一個串代碼朋友說,這個輸出不正確。我表示不信,就試了下從結果看,沒毛病啊。朋友說,你展開看看,一看果然有問題縮略狀態的顯示與展開的顯示不同問題思考這個問題的表現是縮略狀態下顯示原數組,展開狀態下顯示排序后的數組。
問題復現
最近朋友發給我這樣的一個串代碼:
var arr = [1, 4, 2, 3 ]; console.log(arr); arr.sort();
朋友說,這個輸出不正確。我表示不信,就試了下:
從結果看,沒毛病啊。朋友說,你展開看看,一看果然有問題
縮略狀態的顯示與展開的顯示不同?。。?/p> 問題思考
這個問題的表現是:
縮略狀態下顯示原數組 [1, 4, 2, 3 ],展開狀態下顯示排序后的數組[1, 2, 3, 4 ]。
這里的不一致導致我們比較困惑:
console.log(arr)打印的數組到底是原數組還是排序后的數組?
我們知道的是JS代碼是按照順序執行的,按道理說應該打印[1, 4, 2, 3 ],也就是說縮略狀態的顯示是符合常理的。通過下面的代碼我們可以佐證:
var arr = [1, 4, 2, 3 ]; console.log(arr.toString()); // 1,4,2,3 arr.sort();
但是為什么展開后的數組卻是排序后的呢?
我們思考3秒鐘
1...
2...
3...
我個人理解這個問題是這樣的:
Chrome的展開是一個點擊事件,也就是說這是一個異步,等你點擊的時候arr.sort()
已經執行完畢了,這時候點擊展開arr,其實展開的就是排序后的數組(因為arr是引用類型的)。這樣,就出現了上面這個問題。
除數組外,對象也存在這個問題,換句話說,這個引用類型的應該也都存在這個問題。
至此,這個問題算是有了解釋。
以上,個人理解,如果你有更好的解釋,歡迎提出。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/89357.html
摘要:一個詭異的結果在前端開發中,我們都少不了用來輸出變量和調試。再看下面一個例子圖中的結果,我是在執行了這句話之后才點擊的小三角,然而結果卻沒有變成詭異結果的樣子。 一個詭異的結果 在前端開發中,我們都少不了用console.log來輸出變量和調試??墒窃谑褂盟倪^程中,偶爾也會出現一些讓我們很費解的行為,如下圖: showImg(https://segmentfault.com/img/...
摘要:函數柯里化關于函數柯里化的問題最初是在忍者秘籍中講閉包的部分中看到的,相信很多同學見過這樣一道和柯里化有關的面試題實現一個函數,使得如下斷言能夠能夠通過簡單說就是實現一個求值函數,能夠將所有參數相加得出結果。方法返回一個表示該對象的字符串。 函數柯里化 ??關于函數柯里化的問題最初是在《JavaScript忍者秘籍》中講閉包的部分中看到的,相信很多同學見過這樣一道和柯里化有關的面試題:...
摘要:對于通常的特別是那些具備并行計算多線程背景知識的來講,的異步處理著實稱得上詭異。而這個詭異從結果上講,是由的單線程這個特性所導致的。的特性之一是單線程,也即是從頭到尾,都在同一根線程下運行。而這兩者的不同,便在于單線程和多線程上。 對于通常的developer(特別是那些具備并行計算/多線程背景知識的developer)來講,js的異步處理著實稱得上詭異。而這個詭異從結果上講,是由js...
閱讀 1924·2021-10-11 10:59
閱讀 1033·2021-09-07 09:59
閱讀 2226·2021-08-27 16:17
閱讀 2783·2019-08-30 15:54
閱讀 2274·2019-08-30 12:58
閱讀 1773·2019-08-30 12:53
閱讀 1466·2019-08-28 18:13
閱讀 733·2019-08-26 13:35