Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript闭包和内存管理_Javascript_Performance_Memory Management_Closures - Fatal编程技术网

JavaScript闭包和内存管理

JavaScript闭包和内存管理,javascript,performance,memory-management,closures,Javascript,Performance,Memory Management,Closures,我很好奇闭包中的变量是如何处理内存的。以这段代码为例- function iAmAClosure() { var txtName = document.getElementById('name'); function validation() { if (txtName.value.length === 0) { return false; } return true; } documen

我很好奇闭包中的变量是如何处理内存的。以这段代码为例-

function iAmAClosure() {
    var txtName = document.getElementById('name');

    function validation() {
        if (txtName.value.length === 0) {
            return false;
        }
        return true;
    }

    document.getElementById('submit').onclick = function () {
        return validation();
    }
}
每当用户单击按钮时,都会调用My
validation
函数

我的问题是,只要页面处于活动状态,
txtName
变量是否会留在内存中,还是每次调用方法验证时都会对其进行GC'ed和初始化?还有别的吗


在性能方面,什么更好?

函数闭包中的任何变量都保存在内存中,只要有方法引用该函数。在这里,
txtName
是您的
onclick
函数的闭包,因此只要
onclick
绑定完好无损且“submit”按钮存在,它就会留在内存中。

闭包并不重要,如果无法访问var,它就会被收集。“性能”取决于处理能力和内存大小。总的来说,你说不出哪个更好。但是请注意,要每次初始化它,您需要显式地将代码移动到
验证
函数中-行为定义得很好。@dandavis:这就是闭包之所以重要的原因-它使变量可访问:)我只是说闭包本身对收集没有影响。IE6确实在封闭的事件处理程序方面存在一些问题,但那是很久以前的事了……我还想知道在Node这样的服务器环境中是否存在这种问题。考虑只要可以访问
结束
数据
事件处理程序,
主体
变量就会保持不变。作为节点新手,我猜http模块会在请求完成后释放对这些事件处理程序的引用,从而释放
body
closure变量。每个请求创建一个新的闭包(通过传递给
createServer
的函数)和新的事件处理程序。但是医生没有说他们会这么做。谢谢。最后一个问题-在页面变慢之前,我可以使用多少内存,你有什么根据的猜测?chrome开发工具也是测试内存使用情况的最佳工具吗?