帶你快速了解閉包繼承,看完不會來打我

2021-10-04 00:07:19 字數 1925 閱讀 9485

了解閉包

閉包生成的三個條件

在函式 a 內部直接或者間接返回乙個函式 b

b 函式內部使用著 a 函式的私有變數(私有資料)

a 函式外部有乙個變數接受著函式 b

functiona(

)}var res =a(

)// res 接受的是 a 函式執行以後的返回值

//res 接受的就是函式 a 內部返回的乙個複雜資料型別(函式b)

res(

)//列印出來的就是 a 函式內部的私有變數 num 的值

閉包的特點(優點缺點並存)

延長了變數的生命週期

優點: 因為執行空間不銷毀, 變數也沒有銷毀

缺點: 因為執行空間不銷毀, 會一直存在在記憶體中

可以訪問函式內部的私有變數

優點: 利用閉包函式可以訪問函式內部的私有變數

缺點: 執行空間不會銷毀, 會一直存在在記憶體中

保護私有變數

優點: 保護私有變數不被外界訪問

缺點: 如果想訪問, 必須要利用閉包函式

閉包的缺點會造成記憶體洩漏,不到萬不得已不要用。

繼承簡單來說就是:當 a 建構函式的屬性和方法被 b 建構函式的例項使用了,那麼我們就說 b 繼承自 a 建構函式

常用的繼承方法有四種:原型繼承,借用建構函式(call)繼承,組合繼承,類(class)繼承

原型繼承:

//父類

function

person

(name

)person

.prototype.

sayhi

=function()

//子類

function

student

(age

)//實現student繼承person

student

.prototype =

newperson

('jack'

)var s1 =

newstudent(18

) console.

log(s1)

原型繼承的缺點就是:繼承的屬性在__proto__ 裡,當我訪問的時候就要去proto裡面找,自己要用的多個引數在多個位置傳遞,對於**的書寫和**的維護和閱讀都不是很好。

借用建構函式繼承

利用call函式改變this指向達到繼承目的。

直接看**

//父類

function

person

(name, gender

)person

.prototype.

sayhi

=function()

//子類

function

student

(age, name, gender

)person

.prototype.

sayhi

=function()

//子類建構函式

function

student

(gender, name, age

)//原型上的方法

show()

}//準備乙個子類,乙個繼承自 person 的 student 子類

class

student

extends

person

son()}

var s1 =

newstudent(18

,'jack'

) console.

log(s1)

憑藉個人理解寫的不是很好,也不是很詳細,還是要多學習。

閉包的快速了解

想著重新跳槽,偶爾想起用過太多的閉包,卻一下子組織不起來語句去描述它。今天在這好好談談閉包。先上 function a return b 在 a 中返回 b var c a 執行 a,並把 a 的返回結果賦值給變數 c c hello 小仙女 執行 c 這是最簡單的閉包。總結一句話 當乙個內部函式被...

快速了解js中的閉包

閉包的生成有三個必要條件 缺一不可 1.在函式 a 內部直接或者間接返回乙個函式 b 2.b 函式內部使用著 a 函式的私有變數 私有資料 3.a 函式外部有乙個變數接受著函式 b。形成了乙個不會銷毀的函式空間 我們管這個不會銷毀的 a 函式的執行空間叫做 閉包空間 把函式 a 裡面返回的 函式 b...

閉包和繼承

開闢乙個儲存空間把函式體內的 一模一樣的放在這個空間內 不解析變數 把儲存空間的位址給函式名 按照函式名的位址找到函式的儲存空間形參賦值 預解析將函式儲存空間中的 拿出來執行 才解析變數 按照函式名的位址找到函式的儲存空間 形參賦值 預解析在記憶體中開闢乙個執行空間 將函式儲存空間中的 拿出來在剛剛...