使用 iife 模式时从另一个 js 文件调用函数?
Call function from another js file when using iife pattern?
是否可以调用一个 js 文件中的函数,并且它是 public 通过使用 iife 模式在另一个 js 文件中创建的?
例如,这是一些 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
加载之前 运行。
我认为这应该可行。
验证命名空间().validateIf NameAlreadyExistsInTable(名称);
是否可以调用一个 js 文件中的函数,并且它是 public 通过使用 iife 模式在另一个 js 文件中创建的? 例如,这是一些 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
加载之前 运行。
我认为这应该可行。 验证命名空间().validateIf NameAlreadyExistsInTable(名称);