首先,我想告诉所有观众我不是在问关闭是如何工作的,我理解它们,但是,我想知道他们的数据类型应该是什么。
通过操作,闭包就像将功能与环境一起存储的记录。所以,我试着在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
,那么它如何“记住”或存储执行时创建的局部变量?通常,对象会执行此类操作。那么,闭包不应该成为一个对象吗?
答案 0 :(得分:1)
来自MDN的Closures:
闭包是一种特殊的对象,它结合了两件事: 功能,以及创建该功能的环境。该 环境由任何在范围内的局部变量组成 关闭创建的时间。
示例中的闭包由2个组件组成:
myClosure
var string
变量。这是一个引擎实现(基于ecma标准)如何存储这些引用,开发人员无法影响它,只需使用它。