Javascript 嵌套函数初始化

Javascript nested functions initialization

本文关键字:初始化 函数 嵌套 Javascript      更新时间:2023-09-26

我有一个javascript函数,里面包含另一个javascript函数(闭包)

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

我的问题:

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

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

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

由 function1 创建的 function2 无法进行垃圾回收,只要它们可能通过单击处理程序调用。

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

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

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

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

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