0

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

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

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

我的问题:

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

function1不用作构造函数,所以我认为我不应该使用prototype

4

2 回答 2

2

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

由 function1 创建的 function2 不能被垃圾收集,只要它们可能通过你的点击处理程序被调用。

于 2013-10-08T15:16:04.320 回答
0

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

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

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

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

您为这种效率付出的代价是拒绝function2访问内部声明的任何 var 的机会function1。如给定的那样,不存在这样的变量,所以你会没事的。

于 2013-10-08T21:09:53.840 回答