Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Переменные - мои злейшие враги (https://javascript.ru/forum/misc/24702-peremennye-moi-zlejjshie-vragi.html)

function 11.01.2012 09:57

Переменные - мои злейшие враги
 
Привет всем. Делаю програму, столкнулся с паролями... Вобщем то не в паролях дело, а в одной переменной:

var p=0;

function zapros()
{window.alert('p = '+p+' | из начала функции ');
if (p!=1)
{window.alert('p = '+p+' | если р не 1 ');
if (prompt('Введите пароль.', '')=='13u')
{s();p=1;}}

else 
{window.alert('p = '+p+' | из если р - 1 ');s();}}

function s()
{if (confirm('В следующий раз запрашивать пароль?')==true)
{p=0;
window.alert('p = '+p+' | р изменён ');}}


Переменная р в функции s обнуляется, но когда я снова обращаюсь к функции zapros она равна 1. Консоль ошибок невыдаёт, код тоже вроде правильный. В чём дело???

Kolyaj 11.01.2012 10:03

Для начала в форматировании кода. У вас вообще непонятно, какой код к чему относится.

function 11.01.2012 10:17

var p=0;

  function zapros()
{

// Окно для проверки -->
window.alert('p = '+p+'| из начала функции ');
// Окно для проверки -->

 if (p!=1)
{
// Окно для проверки -->
window.alert('p = '+p+'| если р не 1 ');
// Окно для проверки -->


// Окно для ввода паролей (сравниваем введённый с правильным) -->
 if (prompt('Введите пароль.', '')=='13u')
{s();p=1;}}
// Окно для ввода паролей (сравниваем введённый с правильным) -->

else 
{// Окно для проверки -->
window.alert('p = '+p+'| из если р - 1 ');
// Окно для проверки -->
s();}}

function s()
{// Спрашиваем "В следующий раз запрашивать пароль?" -->
if (confirm('В следующий раз запрашивать пароль?')==true)
{// Спрашиваем "В следующий раз запрашивать пароль?" -->
{p=0;
window.alert('p = '+p+'| р изменён ');}}}


// Там где-то есть кнопка по нажатию которой запускаеттся функция zapros() ... -->

Kolyaj 11.01.2012 10:24

Форматирование кода -- это не комментарии, которые зачем-то переводят код на русский язык. Это отступы и пробелы, которые помогают читать код.

А где вы обращаетесь к функции zapros?

function 11.01.2012 10:30

Вот полный код

<html>
<head>
<title>тест</title>

<meta http-equiv="content-type" content="text/html; charset="UTF 8">

<script>


var p=0;

  function zapros()
{

// Окно для проверки -->
window.alert('p = '+p+'| из начала функции ');
// Окно для проверки -->

 if (p!=1)
{
// Окно для проверки -->
window.alert('p = '+p+'| если р не 1 ');
// Окно для проверки -->


// Окно для ввода паролей (сравниваем введённый с правильным) -->
 if (prompt('Введите пароль.', '')=='13u')
{s();p=1;}}
// Окно для ввода паролей (сравниваем введённый с правильным) -->

else 
{// Окно для проверки -->
window.alert('p = '+p+'| из если р - 1 ');
// Окно для проверки -->
s();}}

function s()
{// Спрашиваем "В следующий раз запрашивать пароль?" -->
if (confirm('В следующий раз запрашивать пароль?')==true)
{// Спрашиваем "В следующий раз запрашивать пароль?" -->
{p=0;
window.alert('p = '+p+'| р изменён ');}}}


// Там где-то есть кнопка по нажатию которой запускаеттся функция zapros() ... -->


</script>
</head>
<body>


<input type="button" value="-для админа-" onclick=zapros()>

</body>
</html>


З.Ы. -
Цитата:

Сообщение от function
но когда я снова обращаюсь к функции zapros она равна 1

Через раз - 1 раз нормально работает а второй так.

Nekromancer 11.01.2012 10:39

p < глобальная переменная
s(); < здесь вы ей устанавливаете значение 0
p=1; < а здесь снова 1

function 11.01.2012 10:52

Ну ясно тогда.

art13 11.01.2012 12:55

Сам как то думал как и почему, пока не сказали что я локально внутри функции объявил такую же переменную))) при существовании глобальной

trikadin 11.01.2012 14:31

Через var надо объявлять, во-первых, а во-вторых, надо нормальные названия давать, а не однобуквенные.

nerv_ 11.01.2012 17:05

Цитата:

Сообщение от trikadin
а во-вторых, надо нормальные названия давать, а не однобуквенные.

Узнаю себя :D Для меня так читается легче) Пользуюсь этим, как правило, в небольших (локальных) функциях.


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