了解閉包
閉包生成的三個條件
在函式 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...
閉包和繼承
開闢乙個儲存空間把函式體內的 一模一樣的放在這個空間內 不解析變數 把儲存空間的位址給函式名 按照函式名的位址找到函式的儲存空間形參賦值 預解析將函式儲存空間中的 拿出來執行 才解析變數 按照函式名的位址找到函式的儲存空間 形參賦值 預解析在記憶體中開闢乙個執行空間 將函式儲存空間中的 拿出來在剛剛...