Javascript函数没有定义,但确实如此

时间:2018-05-30 11:24:53

标签: javascript jquery

我的网页代码是:

<!--Custom JavaScript -->
// --> This Script contains the initLoadMore function <--
<script src="/static/js/custom.min.js"></script>    

<script src="/static/js/moment.min.js"></script>
<script src="/static/js/material-datetimepicker.js"></script>
<script>
   $(function(){
      initLoadMore("btnLoadMoreEvents","events-list");
   });
</script>

脚本custom.min.js包含:

$(function(){
function initLoadMore(btnLoadMore,container){
    let num_page = 2;
    $("#"+btnLoadMore).click(function(){
        $.get("?p="+num_page).done(function(data) {
            $("#"+btnLoadMore).prop("disabled",true);
            if(data.last_page == true){
                $("#"+container).append(data.content);
                $("#"+btnLoadMore).remove();
            }else{
                $("#"+container).append(data.content);
                num_page = num_page + 1;
            }
       }).fail(function(xhr){
            swal("Error", "Ha ocurrido un error al cargar m\u00E1s contenido. Por favor, int\u00e9ntalo de nuevo.", "error");
       }).always(function(){
           $("#"+btnLoadMore).prop("disabled",false);
       });
    });
}
});

控制台说Uncaught ReferenceError: initLoadMore is not defined。该功能仅在我删除$(function(){ ... });脚本中的custom.min.js(文档就绪)时才有效。

为什么会这样?

2 个答案:

答案 0 :(得分:1)

initLoadMore是本地函数您无法从其他方面访问它

如果您删除$(function(){},那么它运作良好。

  

$(function(){}就像一个private access modifier。因此,您只能在范围内调用已定义的函数。

答案 1 :(得分:1)

您的函数封装在另一个函数中,因此它不是全局可用的。

如果删除函数周围的$(function(){ ... });部分,则将其声明为全局函数,其他脚本将能够调用它。

为了封装函数,在最后调用它的时候,也许你最后可以调用脚本,然后像这样直接调用它:

(function(){
//do something
}());