Переменные - мои злейшие враги
Привет всем. Делаю програму, столкнулся с паролями... Вобщем то не в паролях дело, а в одной переменной:
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. Консоль ошибок невыдаёт, код тоже вроде правильный. В чём дело??? |
Для начала в форматировании кода. У вас вообще непонятно, какой код к чему относится.
|
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() ... -->
|
Форматирование кода -- это не комментарии, которые зачем-то переводят код на русский язык. Это отступы и пробелы, которые помогают читать код.
А где вы обращаетесь к функции zapros? |
Вот полный код
<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> З.Ы. - Цитата:
|
p < глобальная переменная
s(); < здесь вы ей устанавливаете значение 0 p=1; < а здесь снова 1 |
Ну ясно тогда.
|
Сам как то думал как и почему, пока не сказали что я локально внутри функции объявил такую же переменную))) при существовании глобальной
|
Через var надо объявлять, во-первых, а во-вторых, надо нормальные названия давать, а не однобуквенные.
|
Цитата:
|
Цитата:
|
Цитата:
qqq |
Цитата:
|
Цитата:
|
JSDoc он про то, что делает функция, а не как она это делает. JSDoc пишется для того, кто будет использовать код, а не писать его.
|
Цитата:
|
Нет, я не сказал, что переменные можно называть, как угодно.
|
Цитата:
|
Цитата:
В vba, и не только, новичкам рекомендуют начинать объявление переменной с префикса типа данных. Честно, следовал этому правилу достаточно долго, но записи вида lСounter (счетчик типа Long) или dCurrentDate (d - Date, текущая дата) просто убивают. На данный момент предпочитаю делать примерно так:
/*
Функция noName служит для того, чтобы...
Передается:
x - то-то
z - то-то
Возвращается:
*/
function noName(x, z) {
// код функции с подробными (не тупыми) комментариями
}
Зачастую, комменты дольше пишу, чем код, чтобы мысль сформулировать предельно ясно :) В идеале - прочитал комментарии, и сразу все вспомнил, понял логику и механизм работы. Кто знает, быть может со временем я изменю свою точку зрения... |
Почему /* а не /** ???
|
nerv_, JSDoc удобнее (имхо). я так же, как и ты, расписывал всё в комментах, но когда узнал про jsdoc, мигом перешёл "на тёмную сторону". у них такие вкусные печеньки - при долгом использовании jsdoc станет читаться и пониматься так же легко, как и обычные комментарии, а ещё всё это выводится с тултип сбоку при вызове чего-либо описанного.
|
Цитата:
Я за jsDoc и вменяемые названия переменных. Вы потратите чуть больше времени сейчас ради сохранения его в будущем) |
Цитата:
|
| Часовой пояс GMT +3, время: 04:16. |