我有一堆我想使用模块模式包装的js代码:

(function(){

function closeClicked(closeButton)
{
//do some stuff
}
//some more js code

}());


html调用者的定义如下:

<button type="button" onclick="closeClicked(this)">
<span aria-hidden="true">×</span></button>


该代码将一些html注入到页面上的元素中,并且html中的按钮调用js函数。这可以按预期工作,但是将所有代码包装为模块时找不到该功能。当此代码包装为模块时,是否需要以不同的方式定义或调用函数?

最佳答案

这是设计使然。在闭包外部无法访问闭包中的变量。

在模块模式中,您将公开一个包含功能的模块。在这种情况下,它将看起来像这样:

var myModule = (function(){

    function closeClicked(closeButton)
    {
    //do some stuff
    }

    //some more js code

    return {
        closeClicked: closeClicked
    }
}());


myModule是从外部函数返回的对象。然后,您将引用myModule.closeClicked

09-25 18:55