2015-02-11 75 views
1

有人可以給我解釋一下什麼(this)意味着下面的代碼的末尾:(本)後函數聲明

var a=(function(_this){ 
return function() { 
    //do something 
    return smth; 
}; 
})(this); 

什麼是這種編碼的意義嗎?


下面的代碼放在.js文件中並由html標記調用時會做什麼?

​​

如何從js文件外部實例化對象A?

+0

搜索「立即調用的函數表達式」。有很多關於它的許多許多問題和文章。這是很多事情的常見模式,但你可能會看到它主要在插件和庫上 – 2015-02-11 18:58:30

+0

這是一個自我調用函數。我認爲當你需要隨身攜帶一個對象的引用時,你可以像這樣關閉自我調用函數。 – Michelangelo 2015-02-11 18:58:41

+0

這些答案中的任何一個回答你的問題?如果是這樣,請點擊答案左側的綠色複選標記,選擇一個作爲「最佳答案」。 – jfriend00 2015-02-27 04:42:18

回答

1

這個整體結構是一種保存當前值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的一個特定用途。他們有許多其他用途。

2

這是一個自我執行的函數,用於通過函數的閉包保存對「this」的引用。它用於在函數的第一次執行時保持對「this」的引用。

您還可以使用Function.prototype.bind()來達到節省一提到「本」的類似的結果: MDN - Bind