Переменная JavaScript не определена ошибка? - PullRequest
2 голосов
/ 12 октября 2010

У нас есть три 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 ]

5 голосов
/ 12 октября 2010

Я чувствую себя грязным, когда говорю вам, как превратить вашу "грязную" переменную в грязную глобальную переменную, но это было бы так:

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

Однако вы должны найти лучший способ сделать это,Вот идея:

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

Тогда:

// ...
if (${'body').data('dirty')) takeBath();
2 голосов
/ 12 октября 2010

Как уже отмечали другие, dirty выходит за рамки, потому что оно включено в вашу функцию готовности документа. Вместо этого измените вашу декларацию так:

var dirty = false;
$(function(){

});
2 голосов
/ 12 октября 2010

Переменная dirty известна только в вашем закрытии.Вот почему.

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

Это главная особенность замыкания ...

2 голосов
/ 12 октября 2010

В init.js нельзя просто поместить var dirty = false; как глобальную переменную, а не в определение функции?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...