理解闭包

Understanding closure

本文关键字:闭包      更新时间:2023-09-26

我对Javascript中的闭包有点困惑。

var updateDom = function(param1, param2, param3) {
    return function(event) {
        // Do something.
    };
};
var updateDomForMyBtn = updateDom(param1, param2, param3);
$btnX.on('click', updateDomForMyBtn);

但是为什么我不能把它封装在一个匿名函数中,如果我需要做更多的事情,它可能会很有用:

var updateDom = function(param1, param2, param3) {
    return function(event) {
        // Do something.
    };
};
var updateDomForMyBtn = updateDom(param1, param2, param3);
$btnX.on('click', function() {
    // Do something more...
    return updateDomForMyBtn
});

做这件事的正确方法是什么?

实际上可以将其封装在匿名函数中。你只需要在anon函数的末尾调用updateDomForMyBtn,而不是返回它:

var updateDom = function(param1, param2, param3) {
    return function(event) {
        // Do something.
    };
};
var updateDomForMyBtn = updateDom(param1, param2, param3);
$btnX.on('click', function() {
    // Do something more...
    updateDomForMyBtn();
});