Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   объявление переменной (https://javascript.ru/forum/misc/71435-obyavlenie-peremennojj.html)

рони 19.11.2017 22:56

mikello,
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>

$(document).ready(function() {
alert(f);// 1
});
var f = 1;

  </script>
</head>

<body>


</body>
</html>

mikello 19.11.2017 22:58

Теперь выводит Undefined

mikello 19.11.2017 23:00

Когда у меня выводилась единица, мой код был таким:

Цитата:

<script>
window.onload=function(){
$(document).ready(function() {
alert(f);// undefined
});

var f = 1;
}
</script>
Почему единица выводилась?

рони 19.11.2017 23:02

mikello,
чтоб не было проблем обьявите переменную до использования
<!DOCTYPE html>

<html>
<head>
  <title>Untitled</title>
  <meta charset="utf-8">
  <style type="text/css">
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>

  <script>
window.onload=function(){
var f = 1;
$(document).ready(function() {
alert(f);//1
});

}
  </script>
</head>

<body>


</body>
</html>

mikello 19.11.2017 23:05

Цитата:

window.onload=function(){
$(document).ready(function() {
alert(f);
});
var f = 1;
}
После того как страница полностью загрузилась, происходит выполнение window.onload, а так как страница полностью загрузилась то почему функция ready не выполняется первой ?

mikello 19.11.2017 23:12

Все разобрался, а с этим не поможете ?

Цитата:

$(document).ready(function()
{
alert(f);
var f=0;
})
var f=1;
почему alert выводит undefined?

рони 19.11.2017 23:18

mikello,
на момент алерта переменная(var f=0;) создана, но значение ещё не присвоено.
переменная var f=1; не имеет значения

mikello 19.11.2017 23:20

Вроде понятно. Спасибо.

а как это будет выглядеть в интерпретаторе, он же последовательно все делает. Как он создает переменную , если она объявляется после alert?

рони 19.11.2017 23:22

Цитата:

Сообщение от mikello
почему функция ready не выполняется первой ?

потому что load срабатывает позднее ready, плюс ready внутри load, и в данном случае он раньше не может.

рони 19.11.2017 23:24

Цитата:

Сообщение от mikello
Как он создает переменную , если она объявляется после alert?

он сначала записывает по именам всех зверей в зоопарке скопе, потом их взвешивает инициализирует

mikello 19.11.2017 23:25

я имел в виду другое, а именно первой выполняется ready() или присваивается переменная f=1?

рони 19.11.2017 23:39

mikello,
не могу правильно ответить, нужна помощь из зала :)

mikello 19.11.2017 23:42

:thanks:

mikello 19.11.2017 23:42

вроде ready() выполняется первым, я код написал и проверил это. вроде так

рони 19.11.2017 23:44

mikello,
ready будет сформирована в том порядке и с теми данными которые были на момент её инициализации, когда исполнится не знаю, сразу если html уже готово или будет ещё ждать готовности.

mikello 19.11.2017 23:46

window.load гарантирует то, что функция ready() уже не будет ждать готовности, а выполнится сразу. Не так разве?

рони 19.11.2017 23:54

mikello,
да, но такая конструкция немного бессмысленна, достаточно load

mikello 19.11.2017 23:55

ошибся, имею в виду window.onload=function(){} ...

рони 20.11.2017 00:03

mikello,
или так
/* html + img */
$(window).on("load", function()
 {

 });

или так короткая форма $(document).ready



/* ready html */
$(function() {

});


но не так
window.onload=function(){
$(document).ready(function() {
alert(f);// undefined 
});
var f = 1;
}

и не так

$(window).on("load", function()
 {
$(function() {

});

 });

mikello 20.11.2017 00:04

Цитата:

window.onload=function(){
$(document).ready(function() {
alert(f);// undefined
});
var f = 1;
}
Вы же сами этот пример привели постами ранее. Его я имел в виду. В нем ready() выполняется первой, далее идет var f=1.

Почему он вам не нравится?

рони 20.11.2017 00:22

Цитата:

Сообщение от mikello
Почему он вам не нравится?

пример про правильность применения load и ready, а не про ваш код.
всё что мог, написано выше
далее я пас :)

mikello 20.11.2017 00:24

Так я не понял, мой пример правильный или нет? )

рони 20.11.2017 00:26

mikello,
вам решать что вам нужно undefined или 1

mikello 20.11.2017 00:29

я его привел для того, чтобы показать, что именно в нем ready выполняется быстрее чем var f; . больше не для чего )

Dilettante_Pro 20.11.2017 11:55

mikello,
Небольшая цитата, на всякий случай
Цитата:

Все var будут обработаны один раз, на фазе инициализации.

На фазе исполнения объявления var будут проигнорированы: они уже были обработаны. Зато будут выполнены присваивания.
Цитата отсюда: Глобальные объекты

mikello 20.11.2017 16:03

еще такой вопрос, вроде бы 2 эквивалентных кода:
Цитата:

$(document).ready(function()
{
var f=0;
document.write(f);
})
var f=1;
document.write(f);
Цитата:

var f=1;
document.write(f);

x();
function x()
{
var f=0;
document.write(f);
}
но в первом коде почему-то выводит 0, а во втором 10. Каким образом в первом коде вызов document.write(f) внутри ready перезаписывает первый document.write(f) (f=1)?

рони 20.11.2017 16:13

mikello,
читать про document.write и не использовать в ready, если нет желания убить страницу

рони 20.11.2017 16:14

mikello,
https://learn.javascript.ru/document-write

mikello 20.11.2017 16:18

Цитата:

Метод document.write(str) работает только пока HTML-страница находится в процессе загрузки. Он дописывает текст в текущее место HTML ещё до того, как браузер построит из него DOM.
То есть, тогда когда страница уже загружена, document.write() не будет работать ?

рони 20.11.2017 16:20

Цитата:

Сообщение от mikello
То есть, тогда когда страница уже загружена, document.write() не будет работать ?

будет, но на странице кроме того что выведет document.write ничего больше не будет.

mikello 20.11.2017 16:22

Хорошо, но я так и не понял, почему document.write(f) внутри ready перезаписал предыдущий document.write()

рони 20.11.2017 16:25

Цитата:

Сообщение от mikello
Хорошо, но я так и не понял, почему document.write(f) внутри ready перезаписал предыдущий document.write()

Цитата:

Сообщение от рони
на странице кроме того что выведет document.write ничего больше не будет.

document.write желательно использовать на этапе загрузки страницы

mikello 20.11.2017 16:28

То есть первый document.write() выполнялся на этапе загрузки страницы, а второй document.write() выполнялся уже после загрузки страницы, поэтому кроме того что он вывел ничего не стало. ?

рони 20.11.2017 16:30

mikello,
да

mikello 20.11.2017 16:30

все понял, спасибо :)

mikello 20.11.2017 18:25

Цитата:

var f=1;
document.write(f);
Еще вопрос. Почему данный код выполняется в момент загрузки страницы, но в исходном коде страницы (в браузере) не появляется цифра 1?

mikello 20.11.2017 18:27

Цитата:

<?php
echo "1";
?>
При выполнении этого кода в исходном коде страницы появляется 1.

Dilettante_Pro 20.11.2017 18:28

Появляется.
<script>
var f=1;
document.write(f);
</script>

mikello 20.11.2017 18:28

У меня не появляется

Dilettante_Pro 20.11.2017 18:34

mikello,
Цитата:

Сообщение от mikello
У меня не появляется

Что такое - у меня? В пост 78 появляется?
Где ваш вариант?


Часовой пояс GMT +3, время: 04:50.