javascript如何在函数内部调用函数

时间:2017-06-25 15:31:02

标签: javascript

我有以下javascript

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

    var Site = window.Site;

    $(document).ready(function ($) {
        Site.run();
        var $this = this;

        // Init function
        // ------------------------
        (function () {

            function init() {

                $('tr[data-toggle="slidePanel"]').click(function (e) {
                    e.preventDefault();
                    var me = $(this);

                .... some code here
            }

            init();

        })();

        // Employee function
        // ------------------------
        (function () {

            function getData() {

                ... some code here

                // here is the problem... how can I call buildTable
                $this.buildTable(data);

                ... some code here
                I want to call also the init function on the top.
            }

            function buildTable(data) {

                $('#contactsContent').html(data);

            }   
            getData();
        })();
    });

})(document, window, jQuery);

员工主要功能内部我在getData()内部调用函数buildTable()时遇到问题,之后我想在顶部调用init()函数

有任何线索吗?

2 个答案:

答案 0 :(得分:2)

getData()buildTable()是彼此的兄弟函数,因此它们在同一范围内。无需使用$this为呼叫添加前缀。

只需使用:buildTable(data);

我还必须说你似乎有很多不必要的函数包装器,当它被删除时,也可以直接调用init()

您还希望两次致电init()。是吗?

最后,如果你真的只有你在这里展示的代码,那么就没有必要用最外面的函数包装所有代码,因为一旦DOM是jQuery document.ready函数就会执行准备好了。

以下是您的代码的重写版本:

$(function() {
 'use strict';
   
  var Site = window.Site;
  Site.run();

  // Init function
  (function init() {              
    $('tr[data-toggle="slidePanel"]').click(function (e) {
       e.preventDefault();
       var me = $(this);
       //.... some code here
    }
  })();
        
  // Employee function
  //... some code here
    
  buildTable(data);
    
  //... some code here
  init();
    
  function buildTable(data) {
    $('#contactsContent').html(data);    
  }   
})();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

答案 1 :(得分:0)

为了通过简约更改实现您的目标,您可以执行以下操作:

更改

function init() {

window.init = function() {

然后在需要时随window.init()调用它。这将是一个全局变量,可以从任何范围访问。如果这违背了您的意图,那么请不要选择此解决方案。您需要这样做,因为init与您打算使用它的范围不同。另一方面,您可以按原样拨打buildTable

通常,如果函数在范围内或位于其中一个祖先范围内,则可以从范围调用函数。