function identity()
var me = ;
var you = ;
identity.call(me); // kyle
identity.call(you); // reader
觀察上面的**,使用了this,identity函式就不再需要為每乙個物件編寫不同版本的函式。
回想之前學習的詞法作用域,如果我們想要使用詞法作用域來完成類似的功能,應該這樣寫:
// 顯式傳入乙個上下文物件
function identity(context)
// ...
identity(me); // kyle
identity(you); // reader
顯然,使用this的寫法更加優雅。它的作用就是隱式「傳遞」乙個物件引用。
js中函式是乙個物件,因此是可以在呼叫函式時儲存狀態的,但是this並不會指向函式本身。
this在任何情況下都不指向函式的詞法作用域。在js內部,作用域確實和物件類似,可見的識別符號都是它的屬性。但是作用域「物件」無法通過js**訪問,它存在於js引擎內部。
this是動態作用域的表親,this的繫結與函式宣告的位置無關,而是取決於函式的呼叫方式。
當乙個函式被呼叫時,會建立乙個活動記錄(執行上下文)。這個記錄會包含函式在**被呼叫(呼叫棧)、函式的呼叫方法、傳入的引數等資訊。this就是記錄的其中乙個屬性,會在函式執行的過程中用到。
《你不知道的JS(上捲 )》 二 詞法作用域
作用域共有兩種主要的工作模型。普遍被採用的的是第一種,詞法作用域。另一種為動態作用域,被bash指令碼 perl中的一些模式所採用。第一章提到過編譯階段之一 詞法分析。詞法作用域就是定義在詞法階段的作用域,即詞法作用域由你在寫 時將變數和塊作用域寫在 來決定的,大部分情況下詞法分析器處理 時會保持作...
《你不知道的JS(上捲 )》 六 行為委託
總結第五章,js中的 prototype 機制就是物件之間的關聯關係。想要學習更直觀的使用 prototype 必須認識到它代表了一種不同於類的設計模式。類設計模式鼓勵你在繼承時使用方法重寫 和多型 子類的許多行為可以先 抽象 到父類然後再用子類進行特殊化 重寫 例 父類task,定義所有任務都有的...
關於提單,你不知道的事!
提單bill of lading b l 就代表貨物,一定要對提單有足夠的了解。基本知識和注意點 提單通常是3正3副,也有2正3副的。假如信用證有要求的話,要和貨代特別說明。t t付款方式時,理論上只需要一張正本就可以了 提貨後其他正本自動失效,副本不能提貨 t t收到全部貨款後,給客人寄正本時可以...