深入理解javascript原型和閉包 摘要

2021-09-08 10:49:33 字數 1855 閱讀 5696

一切(引用型別)都是物件,物件是屬性的集合

物件都是通過函式建立的

隱式原型

instanceof的判斷隊則是:沿著a的__proto__這條線來找,同時沿著b的prototype這條線來找,如果兩條線能找到同乙個引用,即同乙個物件,那麼就返回true。如果找到終點還未重合,則返回false。

instanceof表示的就是一種繼承關係,或者原型鏈的結構

訪問乙個物件的屬性時,先在基本屬性中查詢,如果沒有,再沿著__proto__這條鏈向上找,這就是原型鏈。

函式由function函式建立,因此繼承的function.prototype中的方法

這三種資料的準備情況我們稱之為「執行上下文」或者「執行上下文環境」。

給執行上下文環境下乙個通俗的定義——在執行**之前,把將要用到的所有的變數都事先拿出來,有的直接賦值了,有的先用undefined占個空。

其實這是乙個壓棧出棧的過程——執行上下文棧。如下圖:

可根據以下**來詳細介紹上下文棧的壓棧、出棧過程。

如上**。

在執行**之前,首先將建立全域性上下文環境。

然後是**執行。**執行到第12行之前,上下文環境中的變數都在執行過程中被賦值。

執行到第13行,呼叫bar函式。

跳轉到bar函式內部,執行函式體語句之前,會建立乙個新的執行上下文環境。

並將這個執行上下文環境壓棧,設定為活動狀態。

執行到第5行,又呼叫了fn函式。進入fn函式,在執行函式體語句之前,會建立fn函式的執行上下文環境,並壓棧,設定為活動狀態。

待第5行執行完畢,即fn函式執行完畢後,此次呼叫fn所生成的上下文環境出棧,並且被銷毀(已經用完了,就要及時銷毀,釋放記憶體)。

同理,待第13行執行完畢,即bar函式執行完畢後,呼叫bar函式所生成的上下文環境出棧,並且被銷毀(已經用完了,就要及時銷毀,釋放記憶體)。

要到建立這個函式的那個作用域中取值——是「建立」,而不是「呼叫」,切記切記——其實這就是所謂的「靜態作用域」。

閉包 但是你只需要知道應用的兩種情況即可——函式作為返回值,函式作為引數傳遞。

其實,不僅僅是建構函式的prototype,即便是在整個原型鏈中,this代表的也都是當前物件的值。

深入理解Android EventBus原理

1.定義乙個evnet public static class messageevent2.準備觀察者 宣告和注釋你的訂閱方法,可選地指定執行緒模式 subscribe threadmode threadmode.main 比如這個就指定主線程 關於型別的解釋介紹請查閱 註冊和反註冊在你的使用中,例...

深入理解JavaScript箭頭函式

箭頭函式就是個簡寫形式的函式表示式 並且它擁有詞法作用域的this 值 即不會新產生自己作用域下的this,arguments super 和new.target 等物件 此外,箭頭函式總是匿名的 語法 基礎語法 param1,param2,paramn param1,param2,paramn e...

深入理解JavaScript閉包

一 什麼是閉包 多個 兩個或兩個以上 函式巢狀,當內部函式被儲存到外部時,將會生成閉包。內部函式在外面執行的時候一定能夠呼叫的了原來它在的那個函式環境裡的變數。閉包會導致原有作用域鏈不釋放,造成記憶體洩露。functiona var aaa 123 return b var glob 100 var...