JavaScript变量未定义错误?

时间:2010-10-12 19:25:42

标签: javascript jquery variables

我们有三个JS文件:

<script type="text/javascript" src="js/pm.init.js"></script> 
<script type="text/javascript" src="js/pm.util.func.js"></script> 
<script type="text/javascript" src="js/pm.nav.js"></script> 

在init.js中我们有:

$(function(){
    var dirty = false;
})

在util.func.js中我们有:

function dirtyCheck(actionFunction) {
    if (dirty == false) {
        actionFunction();
        return;
    }
    ...

在nav.js中我们有:

$(function(){
    $('#btn-nav-refresh').click(function() {
        dirtyCheck(function() { doRefresh(); });
    });
    ...

现在,当用户点击按钮后btn-nav-refresh函数触发时,我们会收到dirty is not defined错误。这是为什么?

4 个答案:

答案 0 :(得分:5)

我觉得自己很脏,告诉你如何将你的“脏”变量变成一个肮脏的全局变量,但它就像这样:

$(function(){
  window.dirty = false;
})

但是,你应该找到一个更好的方法来做到这一点。这是一个想法:

$(function() {
  $('body').data('dirty', false);
});

然后:

// ...
if (${'body').data('dirty')) takeBath();

答案 1 :(得分:2)

在init.js中你不能把var dirty = false;作为全局变量而不是函数定义吗?

答案 2 :(得分:2)

变量dirty仅在闭包中已知。这就是原因。

$(function(){
    var dirty = false;
});
alert(dirty); // Undefined (same file, just one line after.

这是封闭的主要特征......

答案 3 :(得分:2)

正如其他人所说,dirty超出范围,因为它包含在您的文档就绪函数中。将您的声明更改为:

var dirty = false;
$(function(){

});