最近,我在工作中遇到了一些代码,这让我很困惑最初的编码人员的想法。代码的要旨是:
function func1(array1) {
var returnVal = false;
try
{
// Do something. (No effect on array1)
}
catch (e)
{
CallDebugger(e.description);
}
finally
{
// Clean up the memory?
array1 = null;
}
return returnVal;
}
function func2() {
var arr = [1,2,3]
var ret = func1(arr)
}
我的问题是:在func1的末尾将array1设置为null到底有什么作用?是否在func2中将arr更改为null?还是将array1更改为null会创建对null变量的新引用?还有别的吗?
就内存泄漏而言,这有潜在的好处吗?
在这种情况下,执行array1 = null
似乎很不合理。
在func1的末尾将array1设置为null到底有什么用?是否会将func2中的arr更改为null?
[基本上,array1
是对arr
中对func2
的引用的副本。因此,该赋值将仅在func1
范围内更改变量,而在其他任何地方都不会更改,因此arr
中的func2
保持不变。而且在函数末尾的finally语句中这样做是没有用的,因为func1
紧接在finnaly语句之后,并且对array1
的引用将被垃圾回收,而且没人会知道它被设置为null
(期待它是否最终在关闭之前,但您说不是)。
或者将array1更改为null会创建对null变量的新引用吗?
[它只是将array1
的值设置为null,并且正如我之前所说的:在这种情况下,arr
中的func2
将不会更改。
:)