1、執行環境及作用域 (1).執行環境: 定義了變量或函數有權訪問的其它數據,決定了它們的各自行為。每個執行環境都有一個與之關聯的變量對象(variable object, VO),執行環境中定義的所有變量和函數都會保存在這個對象中,解析器在處理數據的時候就會訪問這個內部對象 ...
前幾天,和朋友聊天,聊到一些js的基礎的時候,有一種 好像知道,好像又不不知道怎么講的感覺 。。。於是撿起書,自己理一理,歡迎拍磚。 閉包 理解閉包首先要理解,js垃圾回收機制,也就是當一個函數被執行完后,其作用域會被收回,如果形成了閉包,執行完后其作用域就不會被收回。 如果某個函數被他的父函數之外的一個變量引用,就會形成閉包 閉包的作用,就是保存自己私有的變量,通過提供的接口 方法 給外部使用 ...
2016-07-24 22:52 3 3564 推薦指數:
1、執行環境及作用域 (1).執行環境: 定義了變量或函數有權訪問的其它數據,決定了它們的各自行為。每個執行環境都有一個與之關聯的變量對象(variable object, VO),執行環境中定義的所有變量和函數都會保存在這個對象中,解析器在處理數據的時候就會訪問這個內部對象 ...
## 原型與原型鏈 * 所有函數都有一個特別的屬性: * `prototype` : 顯式原型屬性 * 所有實例對象都有一個特別的屬性: * `__proto__` : 隱式原型屬性 * 顯式原型與隱式原型的關系 * 函數的prototype: 定義函數時被自動賦值, 值默認 ...
當面試的時候遇到問原型鏈,閉包,還有作用域,直接 拿張紙和筆把原型鏈畫出來,閉包跟作用域直接用筆寫幾道題出來加深理解(因為我們是理科生,圖形和題目以及控制台輸出結果才是最直觀的方法) 問:什么是原型鏈? 答:Javascript是面向對象的,每個實例對象都有一個__proto_屬性 ...
本系列用了大量的篇幅講解了上下文環境和作用域,有些人反映這兩個是一回兒事。本文就用一個小例子來說明一下,作用域和上下文環境絕對不是一回事兒。 再說明之前,咱們先用簡單的語言來概括一下這兩個的區別。 00 上下文環境: 可以理解為一個看不見摸不着的對象(有若干個屬性),雖然看不見摸不着 ...
先解釋一下什么是“自由變量”。 在A作用域中使用的變量x,卻沒有在A作用域中聲明(即在其他作用域中聲明的),對於A作用域來說,x就是一個自由變量。如下圖 如上程序中,在調用fn()函數時,函數體中第6行。取b的值就直接可以在fn作用域中取,因為b就是在這里定義的。而取x的值時,就需要到另一 ...
提到作用域,有一句話大家(有js開發經驗者)可能比較熟悉:“javascript沒有塊級作用域”。所謂“塊”,就是大括號“{}”中間的語句。例如if語句: 再比如for語句: 所以,我們在編寫代碼的時候,不要在“塊”里面聲明變量,要在代碼的一開始就聲明好了。以避免發生歧義 ...
上文簡單介紹了作用域,本文把作用域和上下文環境結合起來說一下,會理解的更深一些。 如上圖,我們在上文中已經介紹了,除了全局作用域之外,每個函數都會創建自己的作用域,作用域在函數定義時就已經確定了。而不是在函數調用時確定。 下面我們將按照程序執行的順序,一步一步把各個上下文環境 ...
執行上下文 執行上下文主要有兩種情況: 全局代碼: 一段<script>標簽里,有一個全局的執行上下文。所做的事情是:變量定義、函數聲明 函數代碼:每個函數里有一個上下 ...