javascript - 使用 iife 模式时从另一个 js 文件调用函数?

标签 javascript design-patterns iife

是否可以调用一个 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 吗?

问题是当我尝试调用它时它是未定义的:

enter image description here

我有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 之前运行。

关于javascript - 使用 iife 模式时从另一个 js 文件调用函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38974526/

相关文章:

c# - 将实体保存到数据库的设计模式

javascript - 类层次结构 : Is there a cleaner pattern for this?

javascript - 尝试使用 IIFE 时未捕获类型错误

javascript - javascript 对象的 polyfill 使用简单的形式创建

javascript - IE 11 无法识别 Angular $http 服务的参数

JavaScript 原型(prototype)对象

java - 对于大型验证任务,责任链模式是一个不错的选择吗?

C++:是否使用 IIFE 线程安全初始化静态局部变量?

javascript - Ckeditor Inline 动态修改工具栏以实现内容编辑

javascript - Ajax请求不发送数据到php页面但登录控制台正常