前端從0單排之JS Day14筆記

2021-09-26 19:13:55 字數 2081 閱讀 2776

棧記憶體:作用域

提供乙個供js**自上而下執行的環境(**都是在棧中執行的)

由於基本資料型別值比較簡單,他們都是直接在棧記憶體中開闢乙個位置,把值直接儲存進去的

當棧記憶體被銷毀,儲存的哪些基本值也都跟著銷毀了

堆記憶體:引用值對應的空間

儲存引用型別值的(物件:鍵值對 函式:**字串)

當前堆記憶體釋放銷毀,那麼這個引用至徹底沒了

堆記憶體的釋放:當堆記憶體沒有被任何的變數或者其他東西所占用,瀏覽器會在空閒的時候,自主的進行記憶體**,把所有不被占用堆的記憶體銷毀掉(谷歌瀏覽器)

*** = null 通過空物件指標null可以讓原始變數(或者其他東西)誰都不指向,那麼原有被占用的堆記憶體就沒有被東西占用,瀏覽器會銷毀他

當棧記憶體(作用域)形成,js**自上而下執行之前,

瀏覽器首先會把所有帶「var」/「function」關鍵字的進行提前的宣告或者定義

這種預先處理機制稱之為「變數提公升」

- 宣告(declare):var  a / function sum (undefined)

- 定義(defined):a = 12 (定義其實就是賦值操作)

[變數提公升階段]

帶"var"的只宣告未定義

帶"function"的宣告和賦值都完成了

變數提公升只發生在當前作用域(例如:開始載入頁面的時候只對全域性作用域下的進行提公升,因為此時函式中儲存的都是字串而已)

在全域性作用域下宣告的函式或者變數是「全域性變數」,同理,在私有作用域下宣告的變數是「私有變數」 [帶var/function的才是宣告]

建立函式部分**後,直接跳過即可(因為在提公升階段就已經完成函式的賦值操作了)

console.

log(a)

;var a =

12;

在全域性作用域下宣告乙個變數,也相當於給window全域性物件設定了乙個屬性,變數的值就是屬性值(私有作用域中的宣告的私有變數和window沒啥關係)

console.

log(a)

;// undefined

console.

log(window.a)

// undefined

console.

log(

'a'in window)

// true 在變數提公升階段,在全域性作用域中宣告了乙個變數a,此時就已經把a當做屬性賦值給window了,只不過此時還沒有給a賦值,預設值undefined :in 檢查某個屬性是否隸屬於這個物件

var a =12;

// 全域性變數值修改,win的屬性值也跟著修改

console.

log(a)

;// 12

// 全域性變數和win中的屬性存在「對映機制」

// 不加var的本質是win的屬性

console.

log(a)

// vm60:1 uncaught referenceerror: a is not defined

console.

log(window.a)

// undefined

console.

log(

'a'in window)

// false

a =12

;// window.a = 12

console.

log(a)

;// 12

console.

log(window.a)

// 12

var a =12,

b =13;

// b 帶var

var a = b =12;

// b不帶var 相當於var a = 12; b = 12;

私有作用域帶var和不帶var的區別

帶var的在私有作用域變數提公升階段,都宣告為私有變數,和外界沒有任何關係

不帶var不是私有變數,會向上級作用域查詢,看是否為上級的變數,不是,繼續向上查詢,一直找到window為止(我們把這種查詢機制叫做:「作用域鏈」)也就是我們在私有作用域中操作的這個非私有變數,是一直操作別人的

前端從0單排之JS Day8筆記

陣列也是物件資料型別的,也是由鍵值對組成的 var ary 12 23,34 結構 0 12,1 23 2 34 length 3 1.以陣列作為索引 屬性名 索引從零開始遞增 2.有乙個length屬性儲存的是陣列長度 ary 0 獲取第一項 ary ary.length 1 獲取最後一項 陣列中...

前端從0單排之JS Day12筆記

math稱為數學函式,但是它屬於物件型別 typeof math object 之所以叫做數學函式,是因為math這個物件中提供了很多運算元學的方法 abs 取絕對值 math.abs 1 1 ceil floor 向上或者向下取整 math.ceil 10 10 math.ceil 10.01 1...

Python從0到1之異常

當檢測到錯誤時,直譯器無法繼續執行了,反而出現了一些錯誤提示,就是異常 try 可能發生錯誤的 except 如果出現異常執行的 try f open test.txt r except f open test.txt w try 1 0except zerodivisionerror print ...