Javascript 未捕获引用错误:未定义js/jQuery方法

Javascript 未捕获引用错误:未定义js/jQuery方法,javascript,jquery,html,Javascript,Jquery,Html,我有一个main.js文件,其中包含一个方法: ;(function ($, window, document, undefined) { 'use strict'; var testing = function(d) { //irrelevant code }; })(jQuery, window, document); 在我的HTML中,就在之前,我引用了jquery.js,而main.js紧跟其后: <script src="/Scrip

我有一个
main.js
文件,其中包含一个方法:

;(function ($, window, document, undefined) {
    'use strict';

    var testing = function(d) {
        //irrelevant code
    };

})(jQuery, window, document);
在我的HTML中,就在
之前,我引用了
jquery.js
,而
main.js
紧跟其后:

<script src="/Scripts/jquery-2.1.4.js"></script>
<script src="/Scripts/main.js"></script>
我在
测试(数据)行中得到以下错误:

未捕获引用错误:未定义测试

为什么会发生这种情况?我如何修复它?如果我的方法是错误的,哪一个是正确的


另外,这是一个ASP.NET MVC项目

您的
main.js
文件正在调用匿名函数,该函数在该范围内定义您的
测试
函数。一旦该功能完成,
测试将不再存在

所以你有两个选择

  • 测试
    移至全局范围

    //main.js
    function testing(d) {
      //irrelevant code
    };
    
  • 测试
    与其他JS一起移动

     <script type="text/javascript">
       (function($) {
         function testing() {
           ...
         }
    
         $(document).ready(function() {
            // call testing here
         });
       })(jQuery);
     </script>
    
    
    (函数($){
    功能测试(){
    ...
    }
    $(文档).ready(函数(){
    //在这里呼叫测试
    });
    })(jQuery);
    

  • 您需要了解,然后才能了解。谢谢,那么不可能从其他范围访问变量吗?不,这就像尝试从位于另一个大陆的杯子中喝咖啡一样。将是最好的术语。在第一个示例中,您的意思是将
    测试
    函数移到
    }(jQuery、窗口、文档)之后?您看到的是整个文件。啊,好的。它不在函数中,所以它是全局的。根据您的需要,有全局或局部范围的js文件是正常的吗?当然,您可以按任何方式来做。关键是要让你的代码易于理解,这样如果你在一年后回顾你的项目,你就会确切地知道
    测试在哪里,它做什么,而不是到处寻找.js文件。
    
     <script type="text/javascript">
       (function($) {
         function testing() {
           ...
         }
    
         $(document).ready(function() {
            // call testing here
         });
       })(jQuery);
     </script>