在javascript中,在将函数名称指向其他地方之后,有没有办法获得该未命名的函数?

Tod*_*nce 2 javascript function

所以我理解函数名只是指向实际函数的指针.

function justAPointer() { //do something }
Run Code Online (Sandbox Code Playgroud)

我可以更改指针名称:

justAPointer = 'oops';
Run Code Online (Sandbox Code Playgroud)

现在该功能仍然存在,但还有什么方法可以达到它吗?

Poi*_*nty 6

该函数仅在某些内容引用时仍然存在.否则,收集垃圾就像你的代码可能分配的任何东西一样.

如果您创建一个对象:

var obj = { hello: "world" };
Run Code Online (Sandbox Code Playgroud)

然后将"obj"重新分配给其他内容:

obj = 22;
Run Code Online (Sandbox Code Playgroud)

然后那个对象同样是垃圾.当然,同样地,如果提供了参考文献的副本,它仍然是:

var obj = { hello: "world" };
var copy = obj;
obj = 22;
Run Code Online (Sandbox Code Playgroud)

那么显然"复制"仍然指的是对象.功能真的没有任何不同.

编辑 - SLaks在评论中指出,有些方法可以在某些地方存放对函数的引用,以确保对象(或函数)的持续"活着",甚至虽然丢失了对对象(或函数)的访问权限.一个例子是setTimeout()功能.传递给该API的函数对象将保持活动状态,直到计时器关闭,但如果您的代码没有保留该函数的其他链接,则无法从运行时系统中获取引用.对于可能与DOM元素相关联的对象,存在(或曾经)类似的情况.这导致(并且可能仍然导致;我非常冒险)问题在于某些浏览器中的DOM垃圾收集器(猜测)不知道如何释放JavaScript分配的存储.

  • 实际上,这并不完全正确.如果我将它传递给`setInterval()`,它仍然存在,但是没有办法访问它. (3认同)