2015-11-10 1 views
1

У меня есть html-файл, в котором есть встроенный JavaScript в конце тела, где определены данные глобальной переменной. Файл JavaScript включен в голову, и одна из функций внутри файла JavaScript использует значение в переменной.Почему windows.data работает, а не данные

Поскольку файл был включен перед определением переменной, переменная в файле JavaScript возвращается неопределенно. но window.variable возвращает переменную. Есть ли общее правило, которого я пропускаю, или это просто совпадение в моем случае.

HTML упрощена:

<script src='myFile.js' language='JavaScript' type='text/javascript'></script> 
<script language="javascript"> 
    var inLine = "abcde"; 
</script> 

myFile.js, что не работает (возвращает Undefine INLINE):

var insideFile = inLine.length; 

myFile.js, который работает:

var insideFile = window.inLine.length; 

В сумме я хотите знать, почему один из них работает, а не другой

+2

ни должны работать – dandavis

+0

@ dandavis вот что я чувствовал. Вот почему я сказал, что это может быть совпадение. Потому что я был потрясен, когда он работал lol –

+1

Я думаю, что вы слишком упростили пример. Ваше наблюдение также может быть неверным. –

ответ

1

Ваш js-файл включен до того, как определена переменная, и что означает, что код внутри файла выполняется до того, как эта переменная определена, поэтому вы получаете ошибку.

Причина вы не получите сообщение об ошибке для window.varname также причина, вы не получите сообщение об ошибке для этого:

var obj = {}; 
console.log(obj.a); 

, когда вы смотрите на объект собственности, и оно не существует Javascript показывает неопределенными.

+0

, window.inLine.length' выдает, если inLine не определено/null. вы можете пойти только «одна дополнительная точка», прежде чем она действительно пропустит. – dandavis

+0

Полезно знать. На самом деле это правда, что во время отладки inLine.length возвращалась неопределенно и вызывала ошибку, а window.inLine.length возвращалась неопределенно, но не вызывала ошибку. Я должен также упомянуть, что код внутри JS-файла находился внутри функции, которая была вызвана в конце файла (объявлен inLine), поэтому единственная проблема, с которой я столкнулся, - это ошибка, возникающая. –

+1

конец файла, конец файла html или файл js? –

0

В сумме я хочу знать, почему один из них работает, а не другой

Один из подходов, которые могли бы вернуть определенные результаты, без ошибок, если бы defer атрибут был установлен на "myFile.js"

<script src="data:text/javascript,var insideFile = window.inLine.length;console.log(inLine, insideFile)" 
 
    type="text/javascript" defer></script> 
 
<script type="text/javascript"> 
 
    var inLine = "abcde"; 
 
    console.log(window.inLine) 
 
</script>

+0

Он не спрашивает, как заставить его работать, он спросил **, почему ** он работал в коде, который он опубликовал. У него нет 'defer' в тегах'