2011-12-17 10 views
3

Я читал некоторые сообщения здесь, используя ключевое слово var при определении новой переменной. В сообщениях упоминалось, как использование var внутри функции создает переменную с локальной областью, тогда как не используя ключевое слово var, создается переменная с глобальной областью. Большинство сообщений рекомендуют всегда использовать var. У меня есть несколько вопросов:Использование ключевого слова var при определении переменной в Javascript

  1. Я учусь JS, и я пытаюсь написать скрипт, который подсчитывает, сколько раз кнопка была нажата (см ниже код). Если в else часть функции totalClicks я использую var numclicks = 1;, то код ниже не работает. Если я опускаю ключевое слово var, он работает. Это потому, что для работы кода numclicks должна быть глобальной переменной или есть какая-то другая причина? Является ли это исключением из правила, что var всегда должен использоваться, или есть другой способ запрограммировать это.

  2. При первом нажатии кнопки выход NaN. Мне непонятно, почему это не 1? Следуя логике кода, кажется, что переменная установлена ​​в 1 до ее записи в документ. Я знаю, что эта проблема будет решена, если я добавлю numclick = 0; перед оператором функции. Но мне непонятно, почему это решает проблему.

Большое спасибо за помощь.

КОД

<html> 
<head> 
    <title>Count number of clicks</title> 
</head> 
<body> 

    <form> 
     <input type="button" value="click here" onclick="totalClicks();"> 
    </form> 

Total clicks: <span id="numclicks"></span> 

    <script type="text/javascript"> 
     function totalClicks(){ 
      if (window.numclicks) { 
       numclicks++; 
      } 
      else { 
       numclicks = 1; 
      } 

      document.getElementById("numclicks").innerHTML = numclicks; 

     } 
    </script> 

</body> 
</html 
+1

Слава дает полный ответ на руду, но для вашей информации Javascript имеет довольно сумасшедшую концепцию подъема. Как только вы это понимаете, это действительно просто, пока вы не делаете что-то похожее на битзарр. Вот очень короткая и простая статья: http: // elegantcode.com/2010/12/24/basic-javascript-part-5-hoisting/ –

+0

@George Mauer Мне нравится веб-дизайн этого сайта :) – ajax333221

+0

@ George - Спасибо за ссылку. Я проверил статью, но все еще неясно. Автор говорит: «Но область функций означает, что все переменные и параметры, объявленные внутри функции, видимы всюду внутри этой функции, даже до того, как была объявлена ​​переменная». Если они видны повсюду, почему первый вывод 'undefined''. Что означает «видимый везде»? – Curious2learn

ответ

0

Попробуйте это:

<html> 
<head> 
    <title>Count number of clicks</title> 
</head> 
<body> 

    <form> 
     <input type="button" value="click here" onclick="totalClicks();"> 
    </form> 

Total clicks: <span id="numclicks"></span> 

    <script type="text/javascript"> 
     function totalClicks(){ 
      var numClicks = document.getElementById("numclicks").value; 

      if (numclicks > 0) { 
       numclicks++; 
      } 
      else { 
       numclicks = 1; 
      } 

      document.getElementById("numclicks").innerHTML = numclicks; 

     } 
    </script> 

</body> 
</html> 
+1

Хотя это может сработать, это уродливая и неэффективная замена глобальной переменной. – Fantius

+0

9. Прекратите прикасаться к DOM, черт! http://jonraasch.com/blog/10-javascript-performance-boosting-tips-from-nicholas-zakas – ajax333221

0
  1. Конечно, это должно быть глобальной переменной.

    Это связано с тем, что область действия локальной переменной умирает, как только вы достигнете конца функции totalClicks().

  2. Я не знаю, что вызывает это, но установив numclicks на 0 ВНЕ. Функция должна помочь. Установите window.numclicks в 0 и всегда используйте window.numclicks, чтобы вы всегда могли видеть, какая глобальная переменная. (Глобальный масштаб часто очень практичен, даже если он часто неодобрительно на многих языках)

2
  1. В первый раз вы определяете numclicks, он должен быть вне каких-либо функций, поэтому она становится глобальной. Использование var при определении переменной внутри функции не делает ее глобальной. Использование var для глобальной переменной внутри функции сделает ее локальной.

  2. У вас есть элемент с идентификатором numclicks, поэтому window.numclicks указывает на этот элемент по умолчанию.

+0

Спасибо Jcubed. Изменение id решило проблему с NaN. – Curious2learn

Смежные вопросы