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

mikello 19.11.2017 18:47

ready function и так выполняется в последнюю очередь.

mikello 19.11.2017 18:53

Цитата:

До ready пишет в document, после - записывает все заново, затирая то,что было раньше
Здесь, как я понял, речь идет в том числе и о переменной. То есть в процессе ready переменная будет undefined, даже если до этого она была определена. Я прав ?

я представляю себе работу интерпретатора на данном ниже примере так:
1) f=1;
2) вывести 1;
3) переменная f на момент выполнения ready - undefined
4)f=0
Цитата:

$(document).ready(function()
{
document.write(f); // здесь undefined
var f=0;
})
var f=1;
document.write(f) // здесь 1
То есть функция ready, когда выполняется, игнорирует предыдущие определения переменной (в данном случае f=1). Я правильно понимаю?

Dilettante_Pro 19.11.2017 19:06

mikello,
Неправильно. Уберите var f=0; в ready или поставьте в начало - и undefined исчезнет.
Дело в том, что в ready вы заново переопределяете переменную, но после использования.

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>$(document).ready(function()
{
console.log(f)
})
var f=1;
console.log(f)
</script>


<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>$(document).ready(function()
{
var f=0;
console.log(f)
})
var f=1;
console.log(f)
</script>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
<script>$(document).ready(function()
{
 f=0;
console.log(f)
})
var f=1;
console.log(f)
</script>

mikello 19.11.2017 19:13

Да, но переопределяю я ее уже после вызова document.write(f); , вот здесь непонятно почему с переменной что-то происходит и каким образом.

Интерпретатор ведь считывает все команды последовательно, так почему f=1 не имеет значения на момент document.write(f) в ready?

Почему к началу действия ready переменная имеет undefined? Она же была определена как 1. Вот что непонятно(

Dilettante_Pro 19.11.2017 19:25

Переменные имеют область видимости.
Сначала оба объявляется как глобальная переменная, внутри ready function переопределяется - глобальная в результате не видна. но значение локальная получает позже использования.

mikello 19.11.2017 19:28

А почему тогда в данном примере область видимости не имеет значения и переменная внутри ready равна 1?

Цитата:

$(document).ready(function()
{
console.log(f)
})
var f=1;
console.log(f)

Dilettante_Pro 19.11.2017 19:31

mikello,
Здесь f глобальная - объявлена вне function и не переопределяется внутри, поэтому видна ВЕЗДЕ.

mikello 19.11.2017 19:33

Цитата:

$(document).ready(function()
{
alert(f);
var f=0;
})
var f=1;
Когда мы обращаемся к alert, мы все ещё обращаемся к глобальной переменной f=1. А локальной она становится уже позже alert. Вот что непонятно.

Цитата:

$(document).ready(function()
{
var f=0
alert(f);
})
var f=1;
Вот здесь понятно, что переменная f переопределяется.

Если конкретнее - что происходит с глобальной переменной f в самом начале ready (до вызова alert())?

Цитата:

но значение локальная получает позже использования.
Так почему при использовании этой переменной выдается undefined, если она была глобальной ?

Dilettante_Pro 19.11.2017 19:51

Почитайте про глобальные обьекты в учебнике на этом форуме

mikello 19.11.2017 19:54

Как я понимаю то, что происходит с переменной f на всем участке кода:

1) f=1
2) f-undefined
3)f=0

Я не совсем понимаю при чем здесь область видимости переменной, если var f=0 идет после alert. Интерпретатор обрабатывает команды последовательно.

Вот вы говорите:
Цитата:

внутри ready function переопределяется - глобальная в результате не видна.
Но переопределяется то она после alert, или я опять чего-то не понимаю?

Цитата:

Почитайте про глобальные обьекты в учебнике на этом форуме
Прочитал, про глобальные переменные все понял, про то почему в примере выводится undefined не понял.


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