是否可以调用一个 js 文件中的函数,并在另一个 js 文件中通过使用 iife 模式将其公开? 例如,这是一些validationScript.js文件:
var ValidationNamespace = function ()
{
var nameValidation = "";
var testValidation = "";
return{
validateIfNameAlreadyExistsInTable : function(currentNameValues)
{
for(var i=0; i < currentNameValues.length ; i++)
{
if(document.getElementById("tbName").value == currentNameValues[i])
{
var nameVal = "Name already exists in table!";
document.getElementById("nameVal").innerHTML = nameVal;
return false;
}
}
document.getElementById("nameVal").innerHTML = "";
return true;
}
};
}();
我还有另一个文件,比如说 script.js
有什么方法可以从某些 script.js 函数调用函数 validateIfNameAlreadyExistsInTable
吗?
问题是当我尝试调用它时它是未定义的:
我有index.html,我在其中引用两个.js 文件,如下所示:
<script type="text/javascript" src="script.js"></script>
<script type="text/javascript" src="validationScript.js"></script>
最佳答案
是的,因为 IIFE 返回了一个公开该函数的对象,并且该文件将该对象保存为 ValidationNamespace
,它是全局声明的 var
,因此是一个全局变量.
所以:
ValidationNamespace.validateIfNameAlreadyExistsInTable(theName);
重新编辑时,您可能希望以其他顺序加载脚本,首先 validationScript.js
然后 script.js
:
<script type="text/javascript" src="validationScript.js"></script>
<script type="text/javascript" src="script.js"></script>
脚本按照您指定的顺序加载和运行(除非您使用async
或defer
)。因此,除非 script.js
中的代码正在等待其他事件,否则它将在加载 validationScript.js
之前运行。
关于javascript - 使用 iife 模式时从另一个 js 文件调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38974526/