我有一堆我想使用模块模式包装的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
。