使用 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>

脚本按照您指定的顺序加载并 运行(除非您使用 asyncdefer)。因此,除非您在 script.js 中的代码正在等待其他事件,否则它将在 validationScript.js 加载之前 运行。

我认为这应该可行。 验证命名空间().validateIf NameAlreadyExistsInTable(名称);