绑定是否创建函数的新副本?

XCS

因此,假设我们具有以下功能:

function inc() {
   this.val++;
}

如果我这样做

var obj = {val: 5};
var incObj = inc.bind(obj);

现在将inc函数以给定的绑定值复制到内存中,还是将单个函数存储在内存中,而仅保存对绑定值的引用?该参考保存在哪里?

我问这个问题是因为我想知道是否会在bind调用时造成内存泄漏(实际上,我关心的是垃圾回收,而不是内存泄漏)

用户名

是否bind创建[底层]函数的新副本?

不,不是。

它创建一个新函数,该新函数在调用时将调用基础函数。

出于所有实际目的,bind是:

function bind(fn, thisArg) {
  return function() {
    return fn.apply(thisArg, arguments);
  };
}

如您所见,绝不fn会复制形状或表格

如果是:

var incObj = inc.bind(obj);

现在将inc函数以给定的绑定值复制到内存中,还是将单个函数存储在内存中,而仅保存对绑定值的引用?该参考保存在哪里?

后者,但是说“单个功能存储在内存中,并且其中仅包含bind被调用功能的引用”会更准确

换句话说,inc保持原样。incObj创建一个新的绑定函数对象,该对象内部指向inc在上面的示例中,inc由于被内部匿名函数关闭而被“存储”。实际上,inc意味着对它的引用存储在引擎的内部绑定函数对象中。

我想知道是否可以通过绑定调用创建内存泄漏。(实际上,我关心的是垃圾回收,而不是内存泄漏)

仅仅创建对象并不是“内存泄漏”;如果该对象永远不会被GC处理,那只会是内存泄漏简单地创建绑定函数将永远不会导致内存泄漏,因为当绑定函数超出范围时,基础函数也会超出范围,因此最终将被GC处理。如果您实际上不是在担心内存泄漏,而是在担心创建对象,这将需要更多的GC并可能导致GC崩溃,那么对于您创建的任何对象都是这种情况,而不仅仅是绑定函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Azure 函数绑定是否按顺序执行?

快速的变异结构函数是否会创建新的self副本?

如何确定是否在Django中创建了新对象?

asio :: strand的副本是否创建新的执行程序?

BlackBerry Dynamics - Xamarin 绑定是否适用于新的动态框架测试版?

Azure 是否会在后端创建 Azure 函数的副本?

Python3:dict构造函数是否创建深层副本?

Clojure递归函数内部的大绑定是否会损害性能?

创建列表副本的函数

分配或条件绑定是否更强?

python中的函数绑定是什么?

节点js中的module.exports是否创建导出对象或函数的浅表副本或深表副本?

从现有副本创建新的MySQL副本

ToDictionary()是否创建副本或引用?

&* x操作是否创建副本?

Redis群集创建副本绑定公共IP

Numpy的vstack是否创建一个新数组-合并的数组的副本?

通过捆绑检索可包裹对象是否总是创建新副本?

创建新的.RDLC报告作为现有.RDLC报告的副本是否安全?

解构和重建时,GHC是否会为该对象创建新副本?

Swift中的字符串连接是否会创建新副本?

是否可以在Python中进行过滤,映射和缩减以创建列表的新副本?

我是否需要为相同形式的副本创建一个新的数据库?

将“结构的指针”传递给函数是否会在C中创建它的本地副本?

RabbitMQ C#API:如何检查绑定是否存在?

嵌套结构化绑定是否可能?

每个服务绑定是否需要一个ServiceConnection?

绑定是否可以与iterate一起使用?

选择整行的 LibreOffice 键绑定是否发生了变化?