閉包 訪問基本資料型別和引用型別

2021-10-03 12:24:55 字數 2193 閱讀 4229

訪問乙個基本變數型別

保護基本資料的變數,使其不能直接被訪問(讀,寫)

function

operatebasevariable()

function

seta

(any)

return

}let opertaebase =

operatebasevariable()

//這是乙個物件,物件裡面包含兩個函式

//獲取a的值

opertaebase.

geta()

//設定a的值

opertaebase.

seta

('a 被重新設定了'

)

這是乙個對 敏感資料 a 的封裝,封裝的原則之一,盡可能少的暴露內部實現的方法,雖然這裡將資料 a 保護起來了,但是我們卻將操作它的方法暴露了,所以可以改進:

function

operatebasevariable()

function

seta

(any)

return

}let opertaebase =

operatebasevariable()

//這是乙個物件,物件裡面包含兩個函式

//獲取a的值

opertaebase.

getbasea()

//設定a的值

opertaebase.

setbasea

('a 被重新設定了'

)

這裡我們如果要操作訪問資料 a 只能通過getbasea() 和 setbasea()兩個方法,那麼其他開發者並不知道 讀寫a 內部是如何完成的,只知道可以通過這兩個方法來完成想要的操作

訪問乙個引用資料型別(陣列)

如何保護乙個陣列呢?直接上**

function

operatecomplexvariable()

function

pusharr

(any)

return

}let opertaecomplex =

operatecomplexvariable()

//這是乙個物件,物件裡面包含兩個函式

//獲取arr的值

opertaebase.

getcomplexarr()

//設定a的值

opertaebase.

pushcomplexarr

('arr push 的資料'

)

訪問乙個引用資料型別(物件)
function

obj(

)function

getobj()

object.

assign

(newobj,obj)

return newobj

}function

setobj

(setobj)

return

}let objoperate =

obj(

)objoperate.

getobject()

objoperate.

setobject()

console.

log(objoperate.

getobject()

)

這個和基本型別資料不同的是,若在獲取的函式中直接公開 arr(這是乙個位址)的話,根本沒有起到保護它的作用,原因就是引用型別在記憶體中的儲存

基本資料儲存是直接存在棧當中,這裡誤操作不會影響保護起來的a 的值

引用資料型別是存在堆當中, 若直接返回受保護的arr 誤操作會改變arr的值, 而如果是這樣操作,深拷貝一下,就算在外部有誤操作也不會影響受保護的 arr 因為被改變的是 arr 的替身 newarr

object.assign

複製原理,內部實現可能是這樣的

//由上面的錯誤的思考

個人淺見,入門不久,若果有錯誤,歡迎指正。

基本資料型別和引用型別

1基本資料與引用資料的基本區別 眾說周知,基本資料型別 為int long,byte,boolean,float,double等第乙個字母為小寫,如果用這些資料型別定義變數,通常情況下,即使沒有賦值,它也會有預設值,例如int 型別為 0 boolean 為 false等,而string 型別 以及...

基本資料型別和引用資料型別

資料型別 基本資料類 1.數值型 整數 byte short int long 浮點 float double 2.字元型 char 3.布林型 boolean 引用資料型別 1.類 class 2.介面 inte ce 3.陣列 array 基本資料型別 它的值是乙個數字 字元或布林值,變數指向具...

資料型別 基本資料型別和引用資料型別

一.分類 1,五種簡單資料型別 基本資料型別 number,string,boolean,null,undefined,新增symbol es6 基本資料型別是指存放在棧中的簡單資料段,資料大小確定,記憶體空間大小可以分配,它們是直接按值存放的,所以可以直接按值訪問。1 undefined 宣告的變...