有人可以給我解釋一下什麼(this)
意味着下面的代碼的末尾:(本)後函數聲明
var a=(function(_this){
return function() {
//do something
return smth;
};
})(this);
什麼是這種編碼的意義嗎?
下面的代碼放在.js文件中並由html標記調用時會做什麼?
如何從js文件外部實例化對象A?
有人可以給我解釋一下什麼(this)
意味着下面的代碼的末尾:(本)後函數聲明
var a=(function(_this){
return function() {
//do something
return smth;
};
})(this);
什麼是這種編碼的意義嗎?
下面的代碼放在.js文件中並由html標記調用時會做什麼?
如何從js文件外部實例化對象A?
這個整體結構是一種保存當前值this
的方法,以便稍後的函數調用可以使用它。
這可能都與.bind()
也做過這樣的它(如果你明白什麼.bind()
也可能是更容易跟蹤):
function myFunc(_this) {
// do something
}
var a = myFunc.bind(null, this);
下面是在代碼會發生什麼的各個步驟您已經顯示:
this
將在最初執行此代碼(您未顯示)時從周圍上下文中獲得值。它被作爲通常被稱爲IIFE(立即調用的函數表達式)的參數傳遞到自執行函數中,該函數只是在代碼初始運行時立即發生內聯的函數調用。
在該函數中,它被賦予參數名稱_this
。
當該函數執行時,它返回另一個函數。該內部功能的主體也可以訪問_this
。
當內部函數返回時,它被分配給變量a
。
所有這一切的結果是,一個可以調用a()
和功能的內部,當執行將能夠訪問_this
其中包含原始this
的價值。
因此,它本質上是一種創建函數的方法,即使在稍後調用a()
時上下文將發生更改,該函數在執行時仍可訪問原始值this
。所以,它實質上爲特定功能節省了價值this
以後使用。
更多的細節需要更多關於該內部函數內部發生了什麼的更多上下文,this
值在原始上下文中是什麼以及以後如何使用a()
。
這是IIFE的一個特定用途。他們有許多其他用途。
這是一個自我執行的函數,用於通過函數的閉包保存對「this」的引用。它用於在函數的第一次執行時保持對「this」的引用。
您還可以使用Function.prototype.bind()來達到節省一提到「本」的類似的結果: MDN - Bind
搜索「立即調用的函數表達式」。有很多關於它的許多許多問題和文章。這是很多事情的常見模式,但你可能會看到它主要在插件和庫上 – 2015-02-11 18:58:30
這是一個自我調用函數。我認爲當你需要隨身攜帶一個對象的引用時,你可以像這樣關閉自我調用函數。 – Michelangelo 2015-02-11 18:58:41
這些答案中的任何一個回答你的問題?如果是這樣,請點擊答案左側的綠色複選標記,選擇一個作爲「最佳答案」。 – jfriend00 2015-02-27 04:42:18