Javascript嵌套函数初始化

时间:2013-10-08 15:08:04

标签: javascript performance closures

我有一个javascript函数,其中包含另一个javascript函数(闭包)

function function1() {
    $("button").bind("click", function () {
        function2();
    });

    function function2() {
        // code
    };
};

我的问题:

当我多次调用function1()时,每次都会创建function2()并保存在内存中吗?还是分享?

function1未用作构造函数,因此我认为我不应该使用prototype

2 个答案:

答案 0 :(得分:2)

每次调用function1时,都会创建一个新的function2并保存在内存中,并作为点击处理程序的一部分注册。

function1创建的function2只要可以通过点击处理程序调用就无法收集垃圾。

答案 1 :(得分:0)

是的,每次function2执行时都会创建function1,这可能是一种可以避免的低效率。

问题中的代码将更有效地执行,如下所示:

function function2() {
    // code
};
function function1() {
    $("button").bind("click", function2);
};

因此,function2被定义一次并且可能多次使用。

您为此效率付出的代价是拒绝function2访问function1内宣布的任何变量的机会。如上所述,不存在这样的变量,所以你会没事的。