如果闭包的行为类似于对象,它们是对象吗?(好像不像)
If closures act like objects, are they objects? (It doesn't seems like)
首先,我想告诉所有观众,我不是在问闭包是如何工作的,我理解它们,但是,我想知道它们的数据类型应该是什么。
通过操作,闭包就像将函数与环境一起存储的记录。所以,我尝试在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 个组件组成:
- 一个简单的函数对象
myClosure
- 定义此函数的捕获环境(范围)。此环境允许您访问
var string
变量。这是一个引擎实现(基于 ecma 标准)如何存储这些引用,开发人员无法影响它,只需使用它。
相关文章:
- 为什么 Google 闭包编译器会重命名对象的属性名称
- JSHint 错误“对象不支持此属性或方法”用于 javascript 闭包
- Javascript对象/闭包
- 使用闭包编译器编写更好的面向对象JavaScript完整示例代码
- 对象的闭包编译器问题
- JavaScript中带有构造函数的对象和闭包之间的区别
- 如何在 Google 闭包编译器中指定对象类型的@param @return
- Google 闭包编译器中的“全局此对象的危险使用”警告
- 这个 getter-setter 闭包是否有充分的理由以这种方式在其内部对象中声明它是私有的
- 测试对象是否是 Google 闭包类框架中接口的实现
- 如果闭包的行为类似于对象,它们是对象吗?(好像不像)
- JavaScript闭包:在对象中动态存储组失败
- 如何强制 Google 闭包编译器重命名方法,即使使用对象也是如此
- 仅在闭包中定义的模拟/存根对象
- 对闭包内对象的赋值的行为类似于指针
- 从 JavaScript 闭包中访问对象的值
- JQuery 通过闭包绑定到对象方法
- Javascript中对象和闭包的有趣和奇怪的行为
- Javascript 闭包(使用参数名称在同一函数中定义对象)
- 是否附加 onchange 对象为闭包