我有一个javascript函数,其中包含另一个javascript函数(闭包)
function function1() {
$("button").bind("click", function () {
function2();
});
function function2() {
// code
};
};
我的问题:
当我多次调用function1()时,每次都会创建function2()并保存在内存中吗?还是分享?
function1
未用作构造函数,因此我认为我不应该使用prototype
答案 0 :(得分:2)
每次调用function1时,都会创建一个新的function2并保存在内存中,并作为点击处理程序的一部分注册。
function1创建的function2只要可以通过点击处理程序调用就无法收集垃圾。
答案 1 :(得分:0)
是的,每次function2
执行时都会创建function1
,这可能是一种可以避免的低效率。
问题中的代码将更有效地执行,如下所示:
function function2() {
// code
};
function function1() {
$("button").bind("click", function2);
};
因此,function2
被定义一次并且可能多次使用。
您为此效率付出的代价是拒绝function2
访问function1
内宣布的任何变量的机会。如上所述,不存在这样的变量,所以你会没事的。