2016-03-07 32 views
1

首先,我想告訴所有觀衆,我不是問閉包如何工作,我理解他們,但是,我想知道他們的數據類型應該是什麼。如果封閉件像物體一樣起作用,它們是否是物體? (它看起來不像)

通過操作,閉包就像一個存儲函數和環境的記錄。所以,我試圖做到這一點的JS:

"use strict"; 

function printString(x){ 
    var string = "hello " + x; 

    return function(){ 
     console.log(string + ' how are you'); 
    }; 
} 

var myClosure = printString("Myname"); 
document.getElementById("testElement").textContent = typeof myClosure; 

現在,如果myClosurefunction數據類型,那麼它是如何能夠「記住」或存儲在執行時產生的局部變量?通常情況下,對象做這種東西。那麼,關閉不應該成爲一個對象嗎?

+1

對象是窮人的關閉和關閉是窮人的對象。 –

+2

Javascript中的一切都是一個對象,甚至是一個函數 – Liam

+1

[本文詳細介紹了這個主題](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Introduction_to_Object-Oriented_JavaScript) – Liam

回答

1

Closures上MDN:

閉包是一種特殊的對象,它結合了兩件事情:一個 功能,並在其中創建該函數的環境。 環境由創建閉包的範圍在 時間範圍內的任何局部變量組成。

在你的實施例中的封閉件包括2個組件:其中定義該函數

  1. 一個簡單函數對象myClosure
  2. 捕獲環境(範圍)。該環境使您可以訪問var string變量。這是一個引擎實現(基於ecma標準)如何存儲這些引用,開發人員無法影響這些引用,只是使用它。
相關問題