Переменные - мои злейшие враги
Привет всем. Делаю програму, столкнулся с паролями... Вобщем то не в паролях дело, а в одной переменной:
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, время: 03:34. |