将参数传递给模块模式函数时未定义

Geting undefined when passing in a parameter to a Module pattern function

$("#foo").on("click", function() {
    amountItems.speek('heey')
})

var amountItems = (function(el) {
    // var el = el;
    return {
        speek: function() {
            alert(el)
        }
    }
}())

这是我第一次尝试使用模块模式。基本上,当 foo 被点击时,我想调用 amountItems 函数中的 speek 方法,我想将字符串 'heey' 传递给该方法,因此当 foo 被点击时它应该警告 'heey' 。最初我想传递类似 $("#foo").text() 的东西,但无论哪种方式我都得到 'undefined'。

你能告诉我如何使用传递给此类函数的 jQuery 对象吗?

您只是将 el 的参数放错了地方。这有效:

$("#foo").on("click", function() {
    amountItems.speek('heey')
})

var amountItems = (function() {
    return {
        speek: function(el) {
            alert(el);
        }
    }
}())

--编辑--

以防万一你想知道整个作用域/私有变量是如何工作的:

$("#foo").on("click", function() {
    amountItems.load('heey');
    amountItems.speek();
})

var amountItems = (function() {
    var el = ""

    return {
        load: function(str) {
            el = str;
        },
        speek: function() {
            alert(el);
        }
    }
}())

当你这样做时:

var amountItems = (function(el) {
    // var el = el;
    return {
        speek: function() {
            alert(el)
        }
    }
}())

你执行了一个包装函数并用内部对象赋值 amountItems
当您调用它时,您 传递参数 (el),因此 el 未定义。

amountItems 是一个具有名为 speek 的方法的对象, 除了参数。

正确的方法是:

var amountItems = {
        speek: function(txt) {
            alert(txt);
        }
    };

$("#foo").on("click", function() {
    amountItems.speek('heey')
})