如果闭包的行为类似于对象,它们是对象吗?(好像不像)

If closures act like objects, are they objects? (It doesn't seems like)

本文关键字:对象 闭包 类似于 如果      更新时间:2023-09-26

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

通过操作,闭包就像将函数与环境一起存储的记录。所以,我尝试在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 ,那么它如何能够"记住"或存储执行时创建的局部变量?通常,对象会执行此类操作。那么,闭包不应该是一个对象吗?

来自 MDN 上的闭包:

闭包是一种特殊的对象,它结合了两件事:一个 函数,以及在其中创建该函数的环境。这 环境由在 创建闭包的时间。

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

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