2016-08-16 61 views
0

是否有可能調用一個js文件中的函數,並在另一個js文件中使用iife模式公開它? 例如,這是一些validationScript.js文件:使用iife模式時從另一個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> 
+0

'ValidationNamespace'持有'object'返回..使用'ValidationNamespace.validateIfNameAlreadyExistsInTable' – Rayon

回答

1

是的,因爲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之前運行。

+0

感謝您的回答,我做了我和我的一個錯誤,說ValidationNamespace不存在。我會用更多信息更新我的問題。 @ T.J.Crowder –

+0

@ nemo_87:您需要在*其他腳本加載後執行此操作。除此之外,它會保證工作,除非有事情稍後爲該變量(或屬性)分配不同的值。 –

+0

哦,所以我看到了,我必須先加載validationScript和script.js。有道理!謝謝:) @ T.J.Crowder –

0

我認爲這應該工作。 ValidationNamespace()。validateIfNameAlreadyExistsInTable(theName);

+0

'ValidationNamespace'不是一個函數,所以試圖調用它會導致錯誤。 –

相關問題