如果闭包像对象一样,它们是对象吗? (看起来不像)

时间:2016-03-07 11:23:42

标签: javascript

首先,我想告诉所有观众我不是在问关闭是如何工作的,我理解它们,但是,我想知道他们的数据类型应该是什么。

通过操作,闭包就像将功能与环境一起存储的记录。所以,我试着在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;

现在,如果myClosure的数据类型为function,那么它如何“记住”或存储执行时创建的局部变量?通常,对象会执行此类操作。那么,闭包不应该成为一个对象吗?

1 个答案:

答案 0 :(得分:1)

来自MDN的Closures

  

闭包是一种特殊的对象,它结合了两件事:   功能,以及创建该功能的环境。该   环境由任何在范围内的局部变量组成   关闭创建的时间。

示例中的闭包由2个组件组成:

  1. 一个简单的函数对象myClosure
  2. 已定义此功能的捕获环境(范围)。通过此环境,您可以访问var string变量。这是一个引擎实现(基于ecma标准)如何存储这些引用,开发人员无法影响它,只需使用它。