javascript之bind 会创建函数的新副本吗
mfrbuaa
阅读:195
2025-06-02 22:19:02
评论:0
所以,假设我们有这个功能:
function inc() {
this.val++;
}
如果我这样做
var obj = {val: 5};
var incObj = inc.bind(obj);
现在将
inc使用给定的绑定(bind)值将函数复制到内存中,还是将单个函数存储在内存中并且只保存对绑定(bind)值的引用?该引用保存在哪里?
我问这个是因为我想知道是否会造成内存泄漏
bind来电。 (实际上我关心的是垃圾回收,而不是内存泄漏)
请您参考如下方法:
Does
bindcreate a new copy of the [underlying] function?
不,它没有。
它创建了一个新函数,在调用该函数时会调用底层函数。
出于所有实际目的,
bind是:
function bind(fn, thisArg) {
return function() {
return fn.apply(thisArg, arguments);
};
}
如您所见,形状或形式绝不是
fn被复制。
如果是:
var incObj = inc.bind(obj);
Will now the
incfunction be copied in the memory with the given bound value or a single function is stored in the memory and only a reference to the bound value is saved? Where is that reference saved?
后者,然而更准确的说法是“单个 新的 函数存储在内存中, 在其中 只是对 函数的引用,
bind 是称为 ”。
换句话说,
inc保持原样。一个新的绑定(bind)函数对象
incObj被创建,内部指向
inc .在上面的例子中,
inc由于被内部匿名函数封闭而被“存储”。实际上,
inc ,意思是对它的引用,存储在引擎的内部绑定(bind)函数对象中。
I want to know if a memory leak could be created making bind calls. (actually I care about garbage collection, not about memory leaks)
仅仅创建对象不是“内存泄漏”;如果对象会 ,这只是内存泄漏。从不被GC'd。简单地创建一个绑定(bind)函数永远不会导致内存泄漏,因为当绑定(bind)函数超出范围时,底层函数也会如此,因此最终会被 GC。如果您实际上担心的不是内存泄漏而是创建对象,这将需要更多的 GC 并可能导致 GC jag,那么您创建的任何对象都是这种情况,而不仅仅是绑定(bind)函数。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。



