Javascript函数调用范围

时间:2013-04-09 15:59:43

标签: javascript function scope

我有以下(简化的)java脚本,html和包含的java脚本(js)文件。我的问题是我得到一个错误,该方法在syncData函数调用中不存在。我得到的事实是我可以调用同步函数,因为它在window的范围内。主要但为什么我不能调用syncData这包含在.js脚本文件中,我该怎么称呼它?

$(window).load(function () {
   Main.init();
});

window.Main = {
sync: function () {
    alert("sync");
},
init: function () {
    var self = this;
    self.displayDialog();
},

displayDialog: function () {
    $("#dialog-confirm").dialog({
        resizable: false,
        height: 240,
        width: 500,
        modal: true,
        buttons: {
            "Sync Data": function () {
                $(this).dialog("close");
                Main.sync();
                syncData();
            },
            Cancel: function () {
                $(this).dialog("close");
                alert("Cancel");
            }
        }
    });
};

HTML:

<!DOCTYPE html>
<head>
     <title>Pay Items Amounts</title>
    <script src="Scripts/jquery-1.9.1.js" type="text/javascript"></script>
    <script src="Scripts/jquery-ui-1.10.2.js" type="text/javascript"></script>
    <!--<script src="Scripts/jquery.unobtrusive-ajax.js" type="text/javascript"></script>-->
    <script src="Scripts/jquery.validate.js" type="text/javascript"></script>
    <script src="Scripts/knockout-2.1.0.js" type="text/javascript"></script>
    <script src="Scripts/modernizr-2.5.3.js" type="text/javascript"></script>
    <script src="Scripts/PayItemAmounts.js" type="text/javascript"></script>
    <script src="Scripts/spin.js" type="text/javascript"></script>
    <script src="Scripts/syncData.js" type="text/javascript"></script>
    <link href="Content/jquery-ui.css" rel="stylesheet" type="text/css" />
</head>
<body>
    <header>
    </header>
    <nav>
    </nav>
    <section class="dialog-confirmation">
        <div id="dialog-confirm" title="Sync Data?" style="display:none">
            <p><span class="ui-icon ui-icon-alert" style="float: left; margin: 0 7px 20px 0;"></span>
            <label id="dialog-message"></label> </p>
        </div>
    </section>
</body>
</html>

JAVASCRIPT syncData.js FILE:
syncData: function () {
    alert("sync");
}

2 个答案:

答案 0 :(得分:0)

您的语法不正确。

function syncData() {
  // whatever
}

我认为你应该得到的是语法错误。标签(“syncData:”)没问题,但没用。函数声明缺少一个名称,因此(我认为)会产生错误。

答案 1 :(得分:0)

您无法调用syncData(),因为您尚未定义名为syncData的函数。

这(因为它不在对象文字定义中):

syncData: function () {
    alert("sync");
}

...是语法错误。

你应该:

function syncData () {
    alert("sync");
}

或者,如果你真的想要一个函数表达式:

var syncData = function () {
    alert("sync");
}