js圍繞記憶體的規則定義

2021-09-01 17:39:36 字數 1477 閱讀 3404

前面寫的一篇「值型別、引用型別與基本包裝型別之我見」的博文裡提到js就是圍繞記憶體來展開自己語言規則的,這也是我一直在強調的東西,所以建議先看我那篇文章理解思想後再來看我下面的內容,我說的東西注重是思想。

學任何語言開始我們都是開始學什麼語法、變數、表示式啊什麼的,其實你想過沒有,所有這些不過就是要教你接受這門語言定義出的關鍵字以及這些關鍵字它所代表的意思和規則,因為js是門解釋性的語言無需編譯,所以它定義的關鍵字及規則應該比較靠近記憶體的邏輯,這也是我強調要把握好js記憶體的管理思想後再去學習js。讓我們回顧一下js給我們提供的一些常用的關鍵字(舉幾個本文要分析的):var number new function {}等。我前面說過語言定義的規則目的就是為了操作記憶體,記憶體操作也就分為:如何在記憶體開闢空間,如何給開闢的空間給資料,如何取出指定空間的資料。

var的規則是在記憶體中開闢空間,也就是我們給變數空位子,如:var a;然後接下來就是要給我們的變數a放資料了,記憶體是根據值型別和引用型別的資料區分儲存模式的,這裡很關鍵的是放資料,放的資料是什麼型別,怎麼放進去,別急,js有自己的規則定義,js專門定義了自己的語言的資料型別,基礎型別(undefined null boolean number string,js把定義的這幾種型別歸到記憶體中值型別的範疇裡面)還有就是object array date regexp function(js把定義的這幾種型別歸到記憶體中引用型別的範疇裡面),那js是如何來識別資料的型別的呢,開始階段js跟其它高階語言沒什麼區別,比如:a=23;這時a的資料就是number型別(它歸為記憶體裡的值型別,就以值型別的方式在記憶體裡儲存)。js除了這樣的普通方式外還定義了許多自己的規則,鑑於記憶體中引用型別資料的特殊性(伸縮性,就是所佔空間可以變大變小,無疑就是資料裡面的東西進行增刪查改),js為了把這種特殊性歸到自己的規則裡面來用,所以才衍生出了object array date regexp function這些自己規則裡面的引用型別的資料型別,它們各有自己的特色(本文不在這裡**他們具體的用處,再次強調本文講的是思想,規則最好去查標準書籍);我這裡就拿function和{}這兩種引用型別在js規則是怎麼反應到記憶體中簡單說一下,var a={} 和function b(){},如果撇開函式定義的特殊關鍵字"function"和"()"的話它跟普通的物件沒什麼區別(所以說函式就是加上js函式特殊關鍵字的特殊物件,其實js定義的那幾種自己的引用型別的資料都是物件,只是各自有了自己的規則,由各自的關鍵字來決定),就是在記憶體中開闢了乙個引用型別的資料(怎麼儲存看我開頭提到的那篇文章,裡面有圖示),加上了「function」和「()」後,js把它叫函式,它的規則是:呼叫記憶體棧裡面的變數b後面再加上個(),b();就可以執行它所指的記憶體堆裡面存放的函式體內容了。關於new和{}這兩關鍵字的規則,我會在後續分析,這裡面涉及到乙個字面量物件的問題,最後還是想提醒大家,我講的是思想,可能跟你們在書上看到的不是很一樣,我說過書上的是叫你們學習它規則的定義,是通過包裝的(為什麼這麼說,我一向認為如果jquery是js的包裝庫,那我覺得js就是瀏覽器最底層的包裝庫,那麼既然是庫,那必然有包裝,包裝就是定義的一些概念,一些表示式的規則),怎麼去理解,我覺得還是取決於個人

js圍繞螢幕轉圈的方塊

點選運動按鈕後,方塊會挨著瀏覽器的邊,從左到右,從上到下轉一圈。這個我居然寫了幾天,我也是不想說什麼咯。完成 一 doctype html html lang en head meta charset utf 8 title js圍繞螢幕轉圈的方塊 title style body input di...

Canvas中的非零圍繞規則原理

非零圍繞規則 對於路徑中指定範圍區域,從該區域內部畫一條足夠長的線段。使此線段的全然落在路徑範圍之外。非零圍繞規則計數器 然後,將計數器初始化為0,每當這個線段與路徑上的直線或曲線相交時,就改變計數器的值,假設是與路徑順時針相交時。那麼計數器就加1,假設是與路徑逆時針相交時。那麼計數器就減1.假設計...

130 被圍繞的區域(JS實現)

給定乙個二維的矩陣,包含 x 和 o 字母 o 找到所有被 x 圍繞的區域,並將這些區域裡所有的 o 用 x 填充。示例 x x x x x o o x x x o x x o x x 執行你的函式後,矩陣變為 x x x x x x x x x x x x x o x x 解釋 被圍繞的區間不會存...