2009-08-27 2 views
3

Вот проблема скрипты:Объем переменной яваскрипта объявлена ​​инлайн

Это из HTML файла:

<script type="text/javascript"> 
    var devices_record = "some string"; 
</script> 
<script type="text/javascript" src="/js/foo.js"></script> 

Это из foo.js, тогда:

function bar() { 
    devices_record = "assign new string"; 
} 

Отчет об ошибке по HttpFox заключается в том, что запись device_ не определена. Что дает? Я думал, что запись device_ будет переменной с глобальным охватом, поэтому она должна быть доступна из любого места.

+1

Вы должны определенно иметь доступ к devices_record. Я думаю, что вам не хватает чего-то другого. Это точный код ИЛИ вы создали образец, чтобы проиллюстрировать проблему? – SolutionYogi

ответ

3

Ваш тестовый кейс работает для меня. Вот мой полный тест:

foo.js:

function bar() { 
    alert(devices_record); 
    devices_record = "assign new string"; 
    alert(devices_record); 
} 

foo.html:

<html> 
<head> 
    <script type="text/javascript"> 
    var devices_record = "some string"; 
    </script> 
    <script type="text/javascript" src="foo.js"></script> 
</head> 
<body onload="bar()"> 
</body> 

Я получаю два предупреждения, первый говорит "some string", второй "assign new string".

Ваша проблема существует в другом месте вашего кода.

+0

Вы правы. Проблема действительно существовала где-то в коде. Спасибо. –

0

Объявление devices_record в foo.js. Затем ссылайтесь на него из javascript, встроенного в HTML.

Вы можете также рассмотреть оборачивать ваши foo.js код в классе, с devices_record как поля/свойства. Это, в частности, может значительно облегчить захват ошибок.

Tidbit: также, если объявление device_record было размещено перед включением скрипта, сценарий может иметь к нему доступ. Однако будьте осторожны с объявлением переменных за пределами файла, который их использует. Если вы решили включить этот скрипт на страницу, которая забывает объявить device_record, вы столкнетесь с ошибками.

1

Я считаю, что ваш данный код работает. По крайней мере выполнение кода, который вы указали выше, не вызовет никаких ошибок.

Кроме того, лучше использовать ваши зависимости, такие как foo.js, перед использованием любых встроенных js. Это гарантирует загрузку вашей библиотеки перед вызовом функций, предоставляемых вашей библиотекой.

Кроме того, операторы присваивания не будут вызывать ошибки «device_ record not defined», поскольку вы определяете его с помощью оператора присваивания.

Возможно, ваша ошибка вызвана чем-то другим.

+0

Хороший вопрос о назначении. Показывает, что апеллятор отключает реальный код, генерирующий ошибку. –

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