2013-09-21 4 views
1

Моя проблема заключается в том, что из DOM существует функция, для которой требуется инициализированная переменная для загрузки DOM. Проблема в том, что даже если функция не вызывается перед загрузкой DOM, она создает эту ошибку: ReferenceError: переменная не определена. Как это сделать, желательно с выражением if, что до тех пор, пока переменная не инициализируется, часть, которая принимает переменную, игнорируется?Создайте функцию, которая использует переменную, если она уже была инициализирована

<script> 
function check(){ 
    if(num>100) alert('test'); 
    else alert('test2'); 
} 
window.onload = function() { 
    var num = Math.floor(Math.random()*11); 
    check(); 
} 
</script> 

Я знаю, что изменение function check() с function check(num) и check(); с check(num); работает нормально, но мне не нравится это решение, я хотел бы понять, почему мой код не работает ...

+0

Какой код вы используете? –

+0

Добавлен код, почему -1? – user2799274

+0

объявить var num глобальным, чтобы вы никогда не получали неопределенные ошибки. –

ответ

1

Объем num - это все неправильно. Попробуйте это:

var num; 
function check(){ 
    if(num>100) alert('test'); 
    else alert('test2'); 
} 
window.onload = function() { 
    num = Math.floor(Math.random()*11); 
    check(); 
} 
+0

Мне нравится ваше решение, спасибо вам большое! – user2799274

+1

переход переменной вместо использования глобальной будет лучше, 1) это поможет сохранить глобальное пространство в чистоте и 2) функция проверки будет более многоразовой. –

+0

@PatrickEvans Я согласен. Но - ОП заявила, что они этого не хотят. У нас нет способа узнать, почему не сейчас, возможно, есть какая-то причина. –

1

num только определяемый внутри функции onload. Вы не можете получить к нему доступ в функции check, если вы не передадите его в качестве параметра.

function check(num) { 
    if(num>100) alert("Test"); 
    else alert("Test2"); 
} 
window.onload = function() { 
    var num = Math.floor(Math.random()*11); 
    check(num); 
}; 
1
(function (num) { 
    if(num>100) alert("Test"); 
    else alert("Test2"); 
})(Math.floor(Math.random()*11)); 

Если вы не беспокоили по поводу явно используя событие window.onload, вы могли бы просто использовать анонимную функцию, как и выше.

Смежные вопросы