Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #21 (permalink)  
Старый 19.11.2017, 18:47
Аспирант
Отправить личное сообщение для mikello Посмотреть профиль Найти все сообщения от mikello
 
Регистрация: 18.11.2017
Сообщений: 68

ready function и так выполняется в последнюю очередь.
Ответить с цитированием
  #22 (permalink)  
Старый 19.11.2017, 18:53
Аспирант
Отправить личное сообщение для mikello Посмотреть профиль Найти все сообщения от mikello
 
Регистрация: 18.11.2017
Сообщений: 68

Цитата:
До 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). Я правильно понимаю?

Последний раз редактировалось mikello, 19.11.2017 в 18:59.
Ответить с цитированием
  #23 (permalink)  
Старый 19.11.2017, 19:06
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

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>

Последний раз редактировалось Dilettante_Pro, 19.11.2017 в 19:13.
Ответить с цитированием
  #24 (permalink)  
Старый 19.11.2017, 19:13
Аспирант
Отправить личное сообщение для mikello Посмотреть профиль Найти все сообщения от mikello
 
Регистрация: 18.11.2017
Сообщений: 68

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

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

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

Последний раз редактировалось mikello, 19.11.2017 в 19:22.
Ответить с цитированием
  #25 (permalink)  
Старый 19.11.2017, 19:25
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Переменные имеют область видимости.
Сначала оба объявляется как глобальная переменная, внутри ready function переопределяется - глобальная в результате не видна. но значение локальная получает позже использования.
Ответить с цитированием
  #26 (permalink)  
Старый 19.11.2017, 19:28
Аспирант
Отправить личное сообщение для mikello Посмотреть профиль Найти все сообщения от mikello
 
Регистрация: 18.11.2017
Сообщений: 68

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

Цитата:
$(document).ready(function()
{
console.log(f)
})
var f=1;
console.log(f)
Ответить с цитированием
  #27 (permalink)  
Старый 19.11.2017, 19:31
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

mikello,
Здесь f глобальная - объявлена вне function и не переопределяется внутри, поэтому видна ВЕЗДЕ.
Ответить с цитированием
  #28 (permalink)  
Старый 19.11.2017, 19:33
Аспирант
Отправить личное сообщение для mikello Посмотреть профиль Найти все сообщения от mikello
 
Регистрация: 18.11.2017
Сообщений: 68

Цитата:
$(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, если она была глобальной ?

Последний раз редактировалось mikello, 19.11.2017 в 19:49.
Ответить с цитированием
  #29 (permalink)  
Старый 19.11.2017, 19:51
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Почитайте про глобальные обьекты в учебнике на этом форуме
Ответить с цитированием
  #30 (permalink)  
Старый 19.11.2017, 19:54
Аспирант
Отправить личное сообщение для mikello Посмотреть профиль Найти все сообщения от mikello
 
Регистрация: 18.11.2017
Сообщений: 68

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

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

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

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

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

Последний раз редактировалось mikello, 19.11.2017 в 20:57.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изменение значения переменной в режиме реального времени The_FactioN jQuery 3 09.03.2016 12:20
посылка переменной kent0026 jQuery 5 04.01.2014 17:34
Как значение переменной вставить в имя переменной? jsgogo Общие вопросы Javascript 3 02.06.2013 12:11
правильное объявление переменной Karpo Общие вопросы Javascript 5 29.09.2010 15:35
Видимость еременных. Объявление и присваивание. DonLino jQuery 9 12.08.2010 12:44